This module defines the HFiaR monad and all the actions you can perform in it

- data HFiaRT m a
- play :: Monad m => HFiaRT m a -> m Game
- eval :: Monad m => HFiaRT m a -> m a
- type HFiaR = HFiaRT IO
- justPlay :: HFiaR a -> IO Game
- justEval :: HFiaR a -> IO a
- data Game
- data Player = Pl {}
- data Tile
- data HFiaRError
- = GameEnded
- | GameNotEnded
- | InvalidColumn
- | FullColumn

- data HFiaRResult
- dropIn :: Monad m => Int -> HFiaRT m (Either HFiaRError ())
- tryDropIn :: Monad m => Int -> HFiaRT m (Either HFiaRError Game)
- player :: Monad m => HFiaRT m (Either HFiaRError Player)
- board :: Monad m => HFiaRT m [[Tile]]
- result :: Monad m => HFiaRT m (Either HFiaRError HFiaRResult)

# MonadTrans controls

Generic HFiaRT type

play :: Monad m => HFiaRT m a -> m GameSource

Starts a game, run the *HFiaRT* actions and returns the game wrapped up in the *m* monad

eval :: Monad m => HFiaRT m a -> m aSource

Starts a game, run the *HFiaRT* actions and returns the result of the last one wrapped up in the *m* monad

# Monad controls

justEval :: HFiaR a -> IO aSource

Starts a game, run the *HFiaRT* actions and returns the result of the last one

# Types

Posible players (each one with his tile colour)

data HFiaRError Source

Posible errors in the HFiaR Monad

data HFiaRResult Source

Posible results for the game

# Actions

Drop a tile in a column

tryDropIn :: Monad m => Int -> HFiaRT m (Either HFiaRError Game)Source

Try (i.e. without actually doing it, returns the result of) dropping a tile in a column

player :: Monad m => HFiaRT m (Either HFiaRError Player)Source

Player who's supposed to play the next tile

result :: Monad m => HFiaRT m (Either HFiaRError HFiaRResult)Source

If the game ended, returns the result of it