rattletrap-4.0.0: library/Rattletrap/Type/Bitstream.hs
module Rattletrap.Type.Bitstream
( Bitstream(..)
) where
import qualified Data.Aeson as Json
import qualified Data.Bool as Bool
import qualified Data.Text as Text
newtype Bitstream = Bitstream
{ bitstreamValue :: [Bool]
} deriving (Eq, Ord, Show)
instance Json.FromJSON Bitstream where
parseJSON =
Json.withText
"Bitstream"
(\text ->
Bitstream <$>
mapM
(\char ->
case char of
'0' -> pure False
'1' -> pure True
_ -> fail ("invalid bit: " ++ show char))
(Text.unpack text))
instance Json.ToJSON Bitstream where
toJSON = Json.toJSON . fmap (Bool.bool '0' '1') . bitstreamValue