packages feed

idris-0.12.1: test/records005/records005.idr

record Score where
       constructor MkScore
       correct : Nat
       attempted : Nat

record GameState where
       constructor MkGameState
       score : Score
       difficulty : Nat

Show GameState where
    show st = show (correct (score st)) ++ "/" 
              ++ show (attempted (score st)) ++ "\n"
              ++ "Difficulty: " ++ show (difficulty st)

initState : GameState
initState = MkGameState (MkScore 0 0) 12

-- Test record update syntax

correct : GameState -> GameState
correct = record { score->correct $= (+1),
                   score->attempted $= (+1) }

wrong : GameState -> GameState
wrong = record { score->attempted $= (+1) }

restart : GameState -> GameState
restart = record { score->attempted = 0,
                   score->correct = 0 }


main : IO ()
main = do let st = initState
          let st' = correct st
          let st'' = wrong st'
          printLn st''
          printLn (restart st'')