hcheckers-0.1.0.2: src/AI.hs
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RecordWildCards #-}
module AI where
import Data.Default
import Data.Aeson
import Core.Types
import Core.Supervisor () -- import instances only
import AI.AlphaBeta.Types
loadAi :: (GameRules rules) => String -> rules -> FilePath -> IO (AlphaBeta rules (EvaluatorForRules rules))
loadAi name rules path = do
r <- decodeFileStrict path
case r of
Nothing -> fail $ "Cannot load AI from " ++ path
Just value -> do
let rules' = SomeRules rules
ai = AlphaBeta def rules (dfltEvaluator rules)
return $ updateAi ai value
parseAi :: (GameRules rules) => rules -> Value -> AlphaBeta rules (EvaluatorForRules rules)
parseAi rules json =
let rules' = SomeRules rules
ai = AlphaBeta def rules (dfltEvaluator rules)
in updateAi ai json