[Haskell-beginners] Haskell for Imperative Programmers

PY aquagnu at gmail.com
Tue Jul 10 13:05:49 UTC 2018


More interesting example from Gabriel Gonzalez: 
http://www.haskellforall.com/2018/02/the-wizard-monoid.html  :)


10.07.2018 15:50, David McBride wrote:
> 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 
> <mailto: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 <mailto: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 <mailto:revollat at gmail.com>> wrote:
>
>             Thanks !
>
>             Le mar. 10 juil. 2018 à 13:14, PY <aquagnu at gmail.com
>             <mailto: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://markkarpov.com/post/free-monad-considered-harmful.html>
>                 https://mmhaskell.com/blog/2017/11/20/eff-to-the-rescue
>                 <https://mmhaskell.com/blog/2017/11/20/eff-to-the-rescue>
>
>                 *Arrows* (something like "flow"-style):
>                 https://www.haskell.org/arrows/
>                 <https://www.haskell.org/arrows/>
>                 http://tuttlem.github.io/2014/07/26/practical-arrow-usage.html
>                 <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
>>                 <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 list
>>                 Beginners at haskell.org <mailto:Beginners at haskell.org>
>>                 http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>                 <http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners>
>
>                 _______________________________________________
>                 Beginners mailing list
>                 Beginners at haskell.org <mailto:Beginners at haskell.org>
>                 http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>                 <http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners>
>
>             _______________________________________________
>             Beginners mailing list
>             Beginners at haskell.org <mailto:Beginners at haskell.org>
>             http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>             <http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners>
>
>         _______________________________________________
>         Beginners mailing list
>         Beginners at haskell.org <mailto:Beginners at haskell.org>
>         http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>         <http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners>
>
>
>     _______________________________________________
>     Beginners mailing list
>     Beginners at haskell.org <mailto:Beginners at haskell.org>
>     http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>     <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/10f6c422/attachment-0001.html>


More information about the Beginners mailing list