[Haskell-beginners] basic State Monad

Kostiantyn Rybnikov k-bx at k-bx.com
Tue Dec 15 14:52:53 UTC 2015


Is your intent is to call main function? How do you compile this module, is
it part of a bigger project, or just a single-file program? If single-file
-- rename main to something else, then create a main function which has a
type "main :: IO ()", and put something like:

    main :: IO ()
    main = print (mainRoutine 10 5)

It'll call mainRoutine with 10 and 5 args and print its result. You can
then run it with "runhaskell MyProg.hs"

On Sun, Dec 13, 2015 at 7:14 PM, Imants Cekusins <imantc at gmail.com> wrote:

> This snippet increments integer n times using state monad.
>
> How to call:
> main 10 5
>
>
>
>
> module BasicState where
>
> import Control.Monad.State.Strict
> import Debug.Trace
>
> type St a = State a a
>
>
> --  caller is not aware that main uses state
> --  mai is a pure function
> main :: Int -> Int -> Int
> main start0 repeat0 =
>         evalState (repeatN repeat0) start0
>
>
> --  state-passing computation
> repeatN :: Int -> St Int
> repeatN n0              --  repeat n times
>     | n0 < 1 = get      --  current state
>     | otherwise = do
>         withState pureStateModifier get     -- update state
>         repeatN $ n0 - 1                    --  recurse
>
>
> --  state unaware modifier function
> pureStateModifier :: Int -> Int
> pureStateModifier = (+ 1)
> _______________________________________________
> 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/20151215/56552776/attachment.html>


More information about the Beginners mailing list