26 lines
499 B
Haskell
26 lines
499 B
Haskell
![]() |
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
||
|
|
||
|
module Game ( GameState(..)
|
||
|
, Game
|
||
|
, runGame
|
||
|
) where
|
||
|
|
||
|
import Level
|
||
|
import Tank
|
||
|
|
||
|
import Control.Monad
|
||
|
import Control.Monad.State
|
||
|
|
||
|
|
||
|
data GameState = GameState
|
||
|
{ level :: !Level
|
||
|
, tanks :: ![Tank]
|
||
|
} deriving (Show)
|
||
|
|
||
|
|
||
|
newtype Game a = Game (StateT GameState IO a)
|
||
|
deriving (Monad, MonadIO, MonadState GameState)
|
||
|
|
||
|
runGame :: GameState -> Game a -> IO (a, GameState)
|
||
|
runGame st (Game a) = runStateT a st
|