packages feed

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