I expect it's that the root of the expression on the last line is ($) and not pure. ApplicativeDo has restrictions on what you can do to avoid allowing blocks that have to translate in terms of join/(>>=), and likely one of them is that the last line can't be an arbitrary thing of the right type.
On 6/16/2016 12:30 PM, amindfv@gmail.com wrote:
They're the same:
> :t \x -> pure x\x -> pure x :: Applicative f => a -> f a> :t \x -> pure $ x\x -> pure $ x :: Applicative f => a -> f a
Tom
Think of the types of
pure x
And
pure $ x
--
--Sent from an expensive device which will be obsolete in a few months! :D
Casey
On Jun 16, 2016 9:06 AM, <amindfv@gmail.com> wrote:
foo :: Applicative f => f String
foo = do
x <- pure "this works"
pure x
... but replace "pure x" with "pure $ x" and it doesn't typecheck: a monad instance is required!
Tom
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe