What does the => sign mean in Haskell?

后端 未结 2 1623
难免孤独
难免孤独 2020-12-20 13:59

For some reason I can\'t find the answer to this anywhere. I tried Googling \"Haskell equal sign arrow\" and I\'m not getting any results. Let\'s say we have the following f

2条回答
  •  失恋的感觉
    2020-12-20 14:12

    First off: if you want to know what such and such operator does, don't ask StackOverflow, ask Hoogle!

    But in fact Hayoo is no use for => in particular because, unlike almost everything else in Haskell, this is built-in syntax and not an operator that's defined in some library.

    Your signature

    sendMessage :: MonadM e m => Message -> m ()
    

    means the following: the type of sendMessage is Message -> m (), where m can be any monad that has an instance of the MonadM type class.

    That probably doesn't help you much, because in fact MonadM is a rather involved type class. Better consider a simpler example:

    sum :: Num n => [n] -> n
    

    This means: the type of sum is [n] -> n, where n can be any number type that's an instance of the Num class, i.e. the class of types supporting subtraction, multiplication, obviously addition etc.. Actually the syntax is shorthand for

    sum :: ∀ n . Num n => [n] -> n
    

    meaning that for all types n which fulfill the constraint Num n, the function sum has the signature [n] -> n.

    You can instantiate such a polymorphic function with any concrete number type: e.g.

    sum :: [Int] -> Int
    

    In your example you'd probably instantiate it to something like

    sendMessage :: Message -> MessageT IO ()
    

提交回复
热议问题