purescript-0.7.2.0: examples/passing/SequenceDesugared.purs
module Main where
import Prelude
import Control.Monad.Eff
data List a = Cons a (List a) | Nil
data Sequence t = Sequence (forall m a. (Monad m) => t (m a) -> m (t a))
sequence :: forall t. Sequence t -> (forall m a. (Monad m) => t (m a) -> m (t a))
sequence (Sequence s) = s
sequenceListSeq :: forall m a. (Monad m) => List (m a) -> m (List a)
sequenceListSeq Nil = pure Nil
sequenceListSeq (Cons x xs) = Cons <$> x <*> sequenceListSeq xs
sequenceList :: Sequence List
sequenceList = Sequence (sequenceListSeq)
sequenceList' :: Sequence List
sequenceList' = Sequence ((\val -> case val of
Nil -> pure Nil
Cons x xs -> Cons <$> x <*> sequence sequenceList' xs))
sequenceList'' :: Sequence List
sequenceList'' = Sequence (sequenceListSeq :: forall m a. (Monad m) => List (m a) -> m (List a))
sequenceList''' :: Sequence List
sequenceList''' = Sequence ((\val -> case val of
Nil -> pure Nil
Cons x xs -> Cons <$> x <*> sequence sequenceList''' xs) :: forall m a. (Monad m) => List (m a) -> m (List a))
main = do
sequence sequenceList $ Cons (Control.Monad.Eff.Console.log "Done") Nil
sequence sequenceList' $ Cons (Control.Monad.Eff.Console.log "Done") Nil
sequence sequenceList'' $ Cons (Control.Monad.Eff.Console.log "Done") Nil
sequence sequenceList''' $ Cons (Control.Monad.Eff.Console.log "Done") Nil