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@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@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners