defining haskell functions that have Maybe in signature -
i'm unclear how write function signatures in haskell, using maybe. consider:
f :: maybe -> maybe f = \a -> main = print (f (just 5)) this works why can't function signature this?
f :: maybe -> maybe since f takes maybe type , returns maybe type.
related: if wanted have maybe type more specific , maybe int, why doesn't work?
f :: maybe int -> maybe int f = \a -> main = print (f (just (int 5))) (i'm running code using runhaskell test.hs)
seems confused type variables. first of all, in
f :: maybe -> maybe f = \a -> the a's in first line have nothing a's in second line, have written:
f :: maybe -> maybe f = \x -> x or even
f :: maybe foo -> maybe foo f = \bar -> bar the a's variables stand types. f here declaring f has whole bunch of types @ once:
f :: maybe int -> maybe int f :: maybe string -> maybe string f :: maybe (maybe bool) -> maybe (maybe bool) ... and on. not "labeling" of arguments suspect think. fact 2 a's same means argument type has same result type. if had said f :: maybe -> maybe b family:
f :: maybe int -> maybe bool f :: maybe string -> maybe string f :: maybe (maybe bool) -> maybe int ... that is, a , b can stand different types, argument , result still have maybe.
the reason can't say
f :: maybe -> maybe is because maybe not type -- type constructor. if give type, gives type. maybe int , maybe string types, , in general maybe a type long a type.
maybe int a (which parsed (maybe int) a) has no meaning because maybe int not type constructor -- not accept more arguments.
suggested reading: types , typeclasses lyah.
Comments
Post a Comment