[Haskell-beginners] Haskell for Imperative Programmers

David McBride toad3k at gmail.com
Tue Jul 10 12:50:42 UTC 2018


No, he means that an IO action is just another type.  For example you can
have a list of IO actions, Then you can take one of them and execute them.
Then you can execute that one action again as many times as you want,
because an IO action is just a type like any other type until it is
executed.  These examples are utterly contrived.

foo :: [IO String]
foo = [return "25", print "hello" >> return "qwerty", getLine]

foo !! 3 :: IO String

bar :: [IO Int]
bar = map (fmap read) foo

main :: IO ()
main = do
  str <- foo !! 2
  print str
  str2 <- foo !! 2
  print str2
  i <- head bar
  print (i + 1)

Even main is just a data structure until the compiler decides to execute
it.  It could have been written as an expression.

main = foo !! 2 >>= \str -> print str >> foo !! 2 >>= \str2 -> print str2
>> head bar >>= \i -> print (i + 1)






On Tue, Jul 10, 2018 at 8:29 AM, Olivier Revollat <revollat at gmail.com>
wrote:

> Yes absolutely ! you're referring to laziness right ?
>
>
> Le mar. 10 juil. 2018 à 14:20, Theodore Lief Gannon <tanuki at gmail.com> a
> écrit :
>
>> An intuition that really clicked for me is that in Haskell IO code, as in
>> all Haskell code, you are describing a pristine and perfectly inert data
>> structure. It happens to *represent* a set of imperative instructions that
>> the totally impure runtime environment can execute, but that's not your
>> problem!
>>
>> On Tue, Jul 10, 2018, 4:55 AM Olivier Revollat <revollat at gmail.com>
>> wrote:
>>
>>> Thanks !
>>>
>>> Le mar. 10 juil. 2018 à 13:14, PY <aquagnu at gmail.com> a écrit :
>>>
>>>> May be something like this?
>>>>
>>>> *Free monads* ("applicative" style/interpreting trees) and Effects:
>>>> https://markkarpov.com/post/free-monad-considered-harmful.html
>>>> https://mmhaskell.com/blog/2017/11/20/eff-to-the-rescue
>>>>
>>>> *Arrows* (something like "flow"-style):
>>>> https://www.haskell.org/arrows/
>>>> http://tuttlem.github.io/2014/07/26/practical-arrow-usage.html
>>>>
>>>>
>>>> 10.07.2018 12:22, Olivier Revollat wrote:
>>>>
>>>> Hi,
>>>> I've been using imperative languages for 20 years now :)
>>>>
>>>> I'm a beginner in haskell and I love the paradigm shift you feel when
>>>> you come from imperative programming. I found interesting articles like :
>>>> https://wiki.haskell.org/Haskell_IO_for_Imperative_Programmers
>>>>
>>>> Do you have any other ressources like that ?
>>>> I'm not looking for how to use haskell in imperative style (e.g. with
>>>> "do" notation, ...) no no ! I'm looking articles who explain how NOT TO USE
>>>> imperative style with haskell, and help thinking the paradigm shift ...
>>>>
>>>> Thanks :)
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Beginners mailing listBeginners at haskell.orghttp://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>>
>>>>
>>>> _______________________________________________
>>>> Beginners mailing list
>>>> Beginners at haskell.org
>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>>
>>> _______________________________________________
>>> Beginners mailing list
>>> Beginners at haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20180710/e3868fd1/attachment.html>


More information about the Beginners mailing list