ribosome-0.4.0.0: lib/Ribosome/Data/Register.hs
module Ribosome.Data.Register where
import Data.Char (isAlpha, isNumber)
import qualified Data.Text as Text (singleton)
import Data.Text.Prettyprint.Doc (Doc, Pretty(..))
import Ribosome.Msgpack.Decode (MsgpackDecode(..), msgpackFromString)
import Ribosome.Msgpack.Encode (MsgpackEncode(..))
data Register =
Named Text
|
Numbered Text
|
Special Text
|
Empty
deriving (Eq, Show, Generic)
instance IsString Register where
fromString "" =
Empty
fromString [a] | isAlpha a =
Named $ Text.singleton a
fromString [a] | isNumber a =
Numbered $ Text.singleton a
fromString a =
Special $ toText a
instance MsgpackDecode Register where
fromMsgpack = msgpackFromString "Register"
instance MsgpackEncode Register where
toMsgpack (Named a) =
toMsgpack a
toMsgpack (Numbered a) =
toMsgpack a
toMsgpack (Special a) =
toMsgpack a
toMsgpack Empty =
toMsgpack ("" :: Text)
prettyRegister :: Text -> Doc a
prettyRegister a =
"\"" <> pretty a
instance Pretty Register where
pretty (Named a) = prettyRegister a
pretty (Numbered a) = prettyRegister (show a)
pretty (Special a) = prettyRegister a
pretty Empty = "no register"
registerRepr :: Register -> Text
registerRepr (Named a) =
"\"" <> a
registerRepr (Numbered a) =
"\"" <> a
registerRepr (Special a) =
"\"" <> a
registerRepr Empty =
""