{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Hammer where import TH.Derive import Data.Store import Data.Binary import Flat import Control.Lens import Data.Aeson import Data.Aeson.TH data HammerType = NoHammer | HasHammer {_hammerPosition :: HammerPosition} deriving (Eq, Ord, Show, Read, Generic, Flat) data HammerPosition = HammerDown | HammerReleased | HammerUp deriving (Eq, Ord, Show, Read, Generic, Flat) $($(derive [d| instance Deriving (Store HammerPosition) |])) makeLenses ''HammerType deriveJSON defaultOptions ''HammerType deriveJSON defaultOptions ''HammerPosition $($(derive [d| instance Deriving (Store HammerType) |]))