Typing up and running (via Hugs) the examples in Wadler's excellent "Monads for 
functional programming" (here: 
http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf) I hit 
the inevitable "show" function error:

ERROR - Cannot find "show" function for:
*** Expression : eval answer
*** Of type    : Int -> (Int,Int)

I can find lots of nice text about extending data for "show" (including the 
miraculous "Deriving") but... I'm showing my Haskell newbie roots by utterly 
failing to understand how to do this of a "higher-order" type (my best guess 
for the right term for the type Int -> (Int, Int)).

It'd be a big help if somebody could tell me either:


a)      It's obvious, you moron, just <insert Haskell code here>

or


b)      It's impossible, you moron, you're trying to violate the <insert 
Haskell rule here>

Here' my code:

data Term = Con Int | Div Term Term
type M a = State -> (a, State) -- higher-order type, e.g. function type
type State = Int -- type synonym
eval :: Term -> M Int
eval (Con a) x = (a, x)
eval (Div t u) x = let (a, y) = eval t x in
                    let (b, z) = eval u y in
                    (a `div` b, z + 1)
answer, error :: Term
answer = (Div(Div(Con 1972)(Con 2))(Con 23))
error = (Div(Con 1)(Con 0))

I get the "ERROR" message when I type "eval answer" at the Hugs prompt.

Thanks!

Tom Titchener

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to