[Haskellcafe] function types as instances of Num
Simon PeytonJones
simonpj at microsoft.com
Wed Nov 1 04:42:43 EST 2006
Try
test' = square . (4 :: a > (Integer,a))
Otherwise, how is the compiler to know that you want 4 to be of that
type?
S
 Original Message
 From: haskellcafebounces at haskell.org
[mailto:haskellcafebounces at haskell.org] On Behalf Of Greg
 Buchholz
 Sent: 26 October 2006 18:46
 To: haskellcafe at haskell.org
 Subject: [Haskellcafe] function types as instances of Num


 Let's say we've got a little stack language, where you compute
 things by transformations of stacks, using compositions of functions
 from stacks to stacks (represented here as nested tuples). (See also
 Chris Okasaki's "Techniques for Embedding Postfix Languages in
Haskell"
 www.eecs.harvard.edu/~nr/ cs252r/archive/chrisokasaki/hw02.ps )

 For example, the simple program below calculates the square of 4...

 > {# OPTIONS fglasgowexts #}
 >
 > main = print $ test ()
 >
 > test = square . (lit 4)
 >
 > lit :: Integer > a > (Integer,a)
 > lit val stack = (val, stack)
 >
 > dup (a, b) = (a, (a, b))
 > mult (a, (b, c)) = (b*a, c)
 > square = mult . dup

 ...now let's say I find that using the function "lit" to annotation
 numeric literals ugly. What I really want is something like...

 > test' = square . 4

 ...Seems simple enough, I'll just make an appropriate instance of Num
 and I'll be able to use fromInteger...

 > instance Eq (a > (Integer, a))
 > instance Show (a > (Integer, a))
 > instance Num (a > (Integer, a)) where
 > fromInteger = lit

 ...but now when I try it, GHC complains...

 No instance for (Num (a > (Integer, t)))
 arising from the literal `4' at final.hs:15:17
 Possible fix:
 add an instance declaration for (Num (a > (Integer, t)))
 In the second argument of `(.)', namely `4'
 In the expression: square . 4
 In the definition of `test'': test' = square . 4

 ...so it seems that (a > (Integer, t)) can't be unified with (a >
 (Integer, a)), or somesuch. Any thoughts on how to get this to work?


 Thanks,

 Greg Buchholz


 _______________________________________________
 HaskellCafe mailing list
 HaskellCafe at haskell.org
 http://www.haskell.org/mailman/listinfo/haskellcafe
More information about the HaskellCafe
mailing list