Modify Game's export function to edit JSON content
This commit is contained in:
parent
262b6e3e79
commit
b785bdda22
2 changed files with 10 additions and 7 deletions
|
@ -1,7 +1,7 @@
|
||||||
-- Initial hanafudapi.cabal generated by cabal init. For further
|
-- Initial hanafudapi.cabal generated by cabal init. For further
|
||||||
-- documentation, see http://haskell.org/cabal/users-guide/
|
-- documentation, see http://haskell.org/cabal/users-guide/
|
||||||
|
|
||||||
name: hanafudapi
|
name: hanafuda-webapp
|
||||||
version: 0.1.1.0
|
version: 0.1.1.0
|
||||||
synopsis: A webapp for the Haskell hanafuda library
|
synopsis: A webapp for the Haskell hanafuda library
|
||||||
-- description:
|
-- description:
|
||||||
|
@ -35,6 +35,7 @@ executable hanafudapi
|
||||||
build-depends: base >=4.10 && <4.11
|
build-depends: base >=4.10 && <4.11
|
||||||
, bytestring
|
, bytestring
|
||||||
, containers
|
, containers
|
||||||
|
, unordered-containers
|
||||||
, hanafuda >= 0.3.0
|
, hanafuda >= 0.3.0
|
||||||
, http-types
|
, http-types
|
||||||
, aeson
|
, aeson
|
14
src/Game.hs
14
src/Game.hs
|
@ -4,6 +4,7 @@
|
||||||
{-# LANGUAGE FlexibleInstances #-}
|
{-# LANGUAGE FlexibleInstances #-}
|
||||||
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
||||||
{-# LANGUAGE MultiParamTypeClasses #-}
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
module Game (
|
module Game (
|
||||||
Key
|
Key
|
||||||
, View
|
, View
|
||||||
|
@ -15,7 +16,8 @@ module Game (
|
||||||
|
|
||||||
import Data.Text (pack)
|
import Data.Text (pack)
|
||||||
import Data.Map (mapWithKey)
|
import Data.Map (mapWithKey)
|
||||||
import Data.Aeson (FromJSON(..), ToJSON(..), ToJSON1(..), ToJSONKey(..), genericParseJSON, genericToEncoding, genericLiftToEncoding, toEncoding1, toJSON1)
|
import Data.HashMap.Strict (insert)
|
||||||
|
import Data.Aeson (FromJSON(..), ToJSON(..), ToJSON1(..), ToJSONKey(..), Value(..), genericParseJSON, genericToEncoding, genericLiftToEncoding, toEncoding1, toJSON1)
|
||||||
import Data.Aeson.Types (toJSONKeyText)
|
import Data.Aeson.Types (toJSONKeyText)
|
||||||
import qualified JSON (defaultOptions, singleLCField)
|
import qualified JSON (defaultOptions, singleLCField)
|
||||||
import qualified Data (Key)
|
import qualified Data (Key)
|
||||||
|
@ -90,16 +92,16 @@ new :: Player.Key -> Player.Key -> IO T
|
||||||
new p1 p2 = do
|
new p1 p2 = do
|
||||||
Hanafuda.KoiKoi.new [p1, p2] Hanafuda.KoiKoi.WholeYear
|
Hanafuda.KoiKoi.new [p1, p2] Hanafuda.KoiKoi.WholeYear
|
||||||
|
|
||||||
export :: Player.Key -> T -> T
|
export :: Player.Key -> T -> Value
|
||||||
export key on = on {
|
export key on = Object $ insert "deck" (toJSON $ length $ Hanafuda.KoiKoi.deck on) $ ast
|
||||||
Hanafuda.KoiKoi.deck = []
|
|
||||||
, Hanafuda.KoiKoi.players = Hanafuda.Player.Players $ mapWithKey maskOpponentsHand unfiltered
|
|
||||||
}
|
|
||||||
where
|
where
|
||||||
Hanafuda.Player.Players unfiltered = Hanafuda.KoiKoi.players on
|
Hanafuda.Player.Players unfiltered = Hanafuda.KoiKoi.players on
|
||||||
maskOpponentsHand k player
|
maskOpponentsHand k player
|
||||||
| k == key = player
|
| k == key = player
|
||||||
| otherwise = player {Hanafuda.Player.hand = Hanafuda.empty}
|
| otherwise = player {Hanafuda.Player.hand = Hanafuda.empty}
|
||||||
|
Object ast = toJSON $ on {
|
||||||
|
Hanafuda.KoiKoi.players = Hanafuda.Player.Players $ mapWithKey maskOpponentsHand unfiltered
|
||||||
|
}
|
||||||
|
|
||||||
play :: Player.Key -> Hanafuda.KoiKoi.Move -> T -> IO (Hanafuda.KoiKoi.Game Player.Key)
|
play :: Player.Key -> Hanafuda.KoiKoi.Move -> T -> IO (Hanafuda.KoiKoi.Game Player.Key)
|
||||||
play key move on
|
play key move on
|
||||||
|
|
Loading…
Reference in a new issue