The type of just is (a -> Maybe a) so your list has type [a -> Maybe a] which means the Monad instance that sequence is using isn't Maybe, it's (a ->), the type constructor for function types with its first parameter partially applied. This means that the type of sequence specialized to this context uses [] for t, the Traversable and (a ->) for m, the Monad. That is to say sequence :: [a -> Maybe a] -> (a -> [Maybe a]). (a ->) is one way of representing the Reader monad so you can treat its a parameter as a context that computations can run inside. That means that sequence [Just, Just] takes two functions that construct a Maybe value from the value in the context and turns it into a function which constructs a list of Maybe values each one fed from the same context. That is to say that (sequence [Just, Just] $ 4) == [Just 4, Just 4].
On Saturday, December 12, 2015, Lim H. <limdauto@gmail.com> wrote:
Hi everyone,Sorry if this email disturbs you. I haven't used a developer's mailing list before so I'm not sure if I'm violating any etiquette. If I do, please excuse me.I'm trying to understand the type of sequence [Just, Just]. I can understandsequence [Just 1, Just 2] :: Num a => Maybe [a]
because when looking at the type of sequencesequence :: (Monad m, Traversable t) => t (m a) -> m (t a)
it is clear that this function takes a collection of monadic values and return a single monadic value of the collection. Thus, when we call
sequence [Just 1, Just 2]
we should get back aJust
of[1,2]
. Following that train of thoughts, shouldn'tsequence [Just, Just]
return a singleJust
?Here is the corresponding SO questionhttp://stackoverflow.com/questions/34244574/trouble-understanding-the-type-of-sequence-just-justLim