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
|