haskell - Why can I use pure function to convert to applicative -
i have following type definition:
data hello b = hi | sali b deriving (show, eq) and isn't instance of applicative can still use pure convert applicative why?
*exercisestraversable data.monoid control.applicative> :t pure $ hi 34 pure $ hi 34 :: (num a, applicative f) => f (hello b) *exercisestraversable data.monoid control.applicative> pure $ hi 34 hi 34 and when try:
*exercisestraversable data.monoid control.applicative> (sali (*2)) <*> (sali 4) <interactive>:23:1: error: * non type-variable argument in constraint: applicative (hello a) (use flexiblecontexts permit this) * when checking inferred type :: forall b a. (num b, applicative (hello a)) => hello b that clear, because isn't applicative instance.
since aren't specifying applicative type in particular, ghci defaulting io, i.e. pure $ hi 34 returns value of type num => io (hello b). is, hello b isn't f in a -> f a, it's a.
you can see more explicitly hello b typed wrapped arbitrary applicative specifying various applicative functors value:
prelude> (pure $ hi 34) :: either string (hello int b) right (hi 34) prelude> (pure $ hi 34) :: maybe (hello int b) (hi 34) prelude> (pure $ hi 34) :: [hello int b] [hi 34] wiki
Comments
Post a Comment