module BishBosh.Input.StandardOpeningOptions(
MatchSwitches,
StandardOpeningOptions(
),
tag,
mkStandardOpeningOptions,
getMatchSwitches
) where
import BishBosh.Data.Bool()
import qualified BishBosh.Text.ShowList as Text.ShowList
import qualified Control.DeepSeq
import qualified Data.Default
import qualified Text.XML.HXT.Arrow.Pickle as HXT
tag :: String
tag = "standardOpeningOptions"
tryToMatchMovesTag :: String
tryToMatchMovesTag = "tryToMatchMoves"
tryToMatchViaJoiningMoveTag :: String
tryToMatchViaJoiningMoveTag = "tryToMatchViaJoiningMove"
tryToMatchColourFlippedPositionTag :: String
tryToMatchColourFlippedPositionTag = "tryToMatchColourFlippedPosition"
type TryToMatchMoves = Bool
type TryToMatchViaJoiningMove = Bool
type TryToMatchColourFlippedPosition = Bool
type MatchSwitches = (TryToMatchMoves, TryToMatchViaJoiningMove, TryToMatchColourFlippedPosition)
data StandardOpeningOptions = MkStandardOpeningOptions {
getTryToMatchMoves :: TryToMatchMoves,
getTryToMatchViaJoiningMove :: TryToMatchViaJoiningMove,
getTryToMatchColourFlippedPosition :: TryToMatchColourFlippedPosition
} deriving Eq
instance Control.DeepSeq.NFData StandardOpeningOptions where
rnf MkStandardOpeningOptions {
getTryToMatchMoves = tryToMatchMoves,
getTryToMatchViaJoiningMove = tryToMatchViaJoiningMove,
getTryToMatchColourFlippedPosition = tryToMatchColourFlippedPosition
} = Control.DeepSeq.rnf (tryToMatchMoves, tryToMatchViaJoiningMove, tryToMatchColourFlippedPosition)
instance Show StandardOpeningOptions where
showsPrec _ MkStandardOpeningOptions {
getTryToMatchMoves = tryToMatchMoves,
getTryToMatchViaJoiningMove = tryToMatchViaJoiningMove,
getTryToMatchColourFlippedPosition = tryToMatchColourFlippedPosition
} = Text.ShowList.showsAssociationList' [
(
tryToMatchMovesTag,
shows tryToMatchMoves
), (
tryToMatchViaJoiningMoveTag,
shows tryToMatchViaJoiningMove
), (
tryToMatchColourFlippedPositionTag,
shows tryToMatchColourFlippedPosition
)
]
instance Data.Default.Default StandardOpeningOptions where
def = MkStandardOpeningOptions {
getTryToMatchMoves = True,
getTryToMatchViaJoiningMove = True,
getTryToMatchColourFlippedPosition = True
}
instance HXT.XmlPickler StandardOpeningOptions where
xpickle = HXT.xpDefault Data.Default.def . HXT.xpElem tag . HXT.xpWrap (
\(a, b, c) -> mkStandardOpeningOptions a b c,
\MkStandardOpeningOptions {
getTryToMatchMoves = tryToMatchMoves,
getTryToMatchViaJoiningMove = tryToMatchViaJoiningMove,
getTryToMatchColourFlippedPosition = tryToMatchColourFlippedPosition
} -> (tryToMatchMoves, tryToMatchViaJoiningMove, tryToMatchColourFlippedPosition)
) $ HXT.xpTriple(
getTryToMatchMoves def `HXT.xpDefault` HXT.xpAttr tryToMatchMovesTag HXT.xpickle
) (
getTryToMatchViaJoiningMove def `HXT.xpDefault` HXT.xpAttr tryToMatchViaJoiningMoveTag HXT.xpickle
) (
getTryToMatchColourFlippedPosition def `HXT.xpDefault` HXT.xpAttr tryToMatchColourFlippedPositionTag HXT.xpickle
) where
def = Data.Default.def
mkStandardOpeningOptions
:: TryToMatchMoves
-> TryToMatchViaJoiningMove
-> TryToMatchColourFlippedPosition
-> StandardOpeningOptions
mkStandardOpeningOptions tryToMatchMoves tryToMatchViaJoiningMove tryToMatchColourFlippedPosition = MkStandardOpeningOptions {
getTryToMatchMoves = tryToMatchMoves,
getTryToMatchViaJoiningMove = tryToMatchViaJoiningMove,
getTryToMatchColourFlippedPosition = tryToMatchColourFlippedPosition
}
getMatchSwitches :: StandardOpeningOptions -> MatchSwitches
getMatchSwitches MkStandardOpeningOptions {
getTryToMatchMoves = tryToMatchMoves,
getTryToMatchViaJoiningMove = tryToMatchViaJoiningMove,
getTryToMatchColourFlippedPosition = tryToMatchColourFlippedPosition
} = (tryToMatchMoves, tryToMatchViaJoiningMove, tryToMatchColourFlippedPosition)