[Haskell-beginners] filterM function

Mike Meyer mwm at mired.org
Wed Apr 22 09:15:31 UTC 2015


On Wed, Apr 22, 2015 at 3:31 AM, Shishir Srivastava <
shishir.srivastava at gmail.com> wrote:

> I still don't quite understand how 'flg' being a boolean [] is used in
> the last 'if statement' of implementation because when I try to do the
> same thing outside in GHCi it fails miserably even though I am casting it
> to [Int] -
>
> --
> return (if [True, False] then "4" else "3")::[Int]
>

"cast" is a misnomer in Haskell. When you add a type to an expression, you
aren't changing the type of the expression like a C-style cast, but picking
out a type from the set of possible types for that expression.

Ignoring the if part and and focusing on return, which has a type Monad m
=> a -> m a. [Int] is equivalent to [] Int, so [] would be the Monad, and a
is Int. While 3 can be an Int, "3", can't. So you could do return 3 ::
[Int] or equivalently return 3 :: [] Int to get [3], you can't do return
"3" :: [Int], because "3" can't be an Int. You can do return "3" ::
[String], since "3" is a string. Just to show the range of possibilities,
you can do return 3 :: IO Float, and get back 3.0 as an IO action. The
monad in the type is IO, and 3 can be interpreted as a Float.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20150422/07616e99/attachment-0001.html>


More information about the Beginners mailing list