Skip to content

Instantly share code, notes, and snippets.

@bergmark
Last active March 16, 2021 12:04

Revisions

  1. bergmark renamed this gist Mar 16, 2021. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. bergmark created this gist Mar 16, 2021.
    24 changes: 24 additions & 0 deletions Main.hs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,24 @@
    module Main where

    import Control.Monad
    import Control.Monad.IO.Class
    import Control.Monad.Trans.State

    main :: IO ()
    main = do
    forLoop 0 (< 10) (+ 1)
    print

    forLoop :: i -> (i -> Bool) -> (i -> i) -> (i -> IO ()) -> IO ()
    forLoop init pred change run =
    void $ flip runStateT init $ iter pred change run

    iter :: (i -> Bool) -> (i -> i) -> (i -> IO ()) -> StateT i IO ()
    iter pred change run = do
    i <- get
    if pred i
    then do
    liftIO (run i)
    modify change
    iter pred change run
    else pure ()