[Haskell-cafe] local type denotation
Serge D. Mechveliani
mechvel at botik.ru
Wed Nov 14 13:03:57 CET 2012
how to correctly set an explicit type for a local value in the body of
a polymorphic function?
Example (tested under ghc-7.6.1):
data D a = D1 a | D2 a (a -> a)
f :: Eq a => D a -> a
f (D1 x) = x
f (D2 x g) = let -- y :: Eq a => a
y = g x
in if x == y then x else g y
main = putStr $ shows (f (D2 (1 :: Int) succ)) "\n"
This is compiled by ghc --make Main
Now I need, for a certain reason, to explicitly set the type for y in
`let', with the meaning:
"this very `a' which is in the signature for f"
(and I think that this type Haskell assignes to y in "y = g x").
I need to declare this type in a separate line: y :: <what ever it is>.
Both `y :: a' and `y :: Eq a => a' are not compiled.
Please, copy the answer to mechvel at botik.ru
More information about the Haskell-Cafe