minesweeper-haskell/app/Main.hs

33 lines
920 B
Haskell
Raw Permalink Normal View History

2019-12-10 00:09:55 +01:00
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeOperators #-}
2019-11-24 02:49:57 +01:00
module Main where
2019-12-10 02:06:09 +01:00
import Data.Function ((&))
import Minesweeper
2019-12-10 00:09:55 +01:00
import Options.Generic
2019-12-10 02:06:09 +01:00
import Polysemy
import Random
import Terminal
2019-11-24 02:49:57 +01:00
2019-12-10 00:09:55 +01:00
data Parameters w =
Parameters
{ width :: w ::: Int <?> "Width of the board"
, length :: w ::: Int <?> "Length of the board"
, bombs :: w ::: Int <?> "Number of bombs to be placed"
}
deriving (Generic)
instance ParseRecord (Parameters Wrapped)
deriving instance Show (Parameters Unwrapped)
2019-11-24 02:49:57 +01:00
main :: IO ()
2019-12-04 00:13:57 +01:00
main = do
2019-12-10 00:09:55 +01:00
(Parameters boardWidth boardLength bombsCount) <- unwrapRecord "Minesweeper"
2019-12-10 02:06:09 +01:00
runMinesweeper boardWidth boardLength bombsCount & runTerminalIO & runRandomIO & runM