haskell - Why does the Maybe type wrap its value in a list? -
i'm going through learnyouahaskell, great book, , i'm @ chapter on typeclasses. here's question. in ghci when enter
fmap (++ "string appended to") ("i basic string, not type constructor") i error
couldn't match type ‘char’ ‘[char]’ expected type: [[char]] actual type: [char] in second argument of ‘fmap’, namely ‘("i basic string, not type constructor")’ i understand why i'm getting error (because functor requires type constructor value just "i value being passed maybe type constructor" don't understand why error reads expected type [[char]] maybe type wrapping value in list? what's deal?
list [] functor too. ghc unifies fmap on lists, , deduces first argument type fmap :: (string -> string) -> [string] -> string:
λ prelude > :t (fmap :: (string -> string) -> [string] -> [string]) (++ "string appended to") ("i basic string, not type constructor") <interactive>:1:88: couldn't match type ‘char’ ‘[char]’ expected type: [string] actual type: [char] but expect fmap specialised fmap :: (string -> string) -> maybe string -> maybe string, give different error message:
λ prelude > (fmap :: (string -> string) -> maybe string -> maybe string) (++ "string appended to") ("i basic string, not type constructor") <interactive>:11:96: couldn't match expected type ‘maybe string’ actual type ‘[char]’ in second argument of ‘fmap :: (string -> string) -> maybe string -> maybe string’, namely ‘("i basic string, not type constructor")’ sometimes ghc doesn't our intentions, , finds "wrong" cause of our error.
Comments
Post a Comment