haskell - How do I use `break_` in the package "loops"? -


looking package loops, found interesting , useful. however, there's 1 part package don't understand: how supposed use break_?

let's have function get' :: io (maybe int), each call return number read file, , returns nothing if eof reached. i'm trying construct simple loop print each number , break upon eof.

now, know loop indefinitely can use forever:

import control.monad.loop ml import control.monad m  main =     m.sequence . loop $         ml.forever         return $             mx <- get'             case mx of                 nothing -> ???                 x  -> print x 

but put break_? loopt io int, can put in loopt monad, isn't supposed called mid interation, instead of when defining loops? confuses me.

loopt monad transfomer, need liftio print x statement.

here usage examples:

import control.monad  import control.monad.trans (liftio) import control.monad.loop ml  -- infinite printing loop foo :: loopt io () foo =   x <- ml.iterate 0 (+1)    liftio $ print x  run_foo = ml.exec_ foo  -- prints 1, 3, 5, 7, 9 bar :: io ()  bar = ml.exec_ $   x <- ml.iterate 1 (+2)   if x < 10     liftio $ print x     else break_ 

update

if want execute infinite loop in monad, use forever control.monad --

import control.monad import control.monad.state  myloop = forever $   x <-   liftio $ print x   put (x+1)  main = runstatet myloop 10 -- start loop @ 10 

update 2

another example using monadic condition:

findfavoritenumber = ml.exec_ $   x <- ml.iterate 1 (+1)   yn <- liftio $ putstr $ "is " ++ show x ++ " favorite number? "                     getline   if yn == "yes"     break_     else return () 

of course, loop doesn't return favorite number - keeps asking until user responds "yes".


Comments

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -