json-autotype-0.2.5.11: Data/Aeson/AutoType/Plugin/Subtype.hs
-- | API to which @SubtypePlugin@s should conform.
module Data.Aeson.AutoType.Plugin.Subtype (
SubtypePlugin (..)
, SubtypeDesc (..)
) where
import Data.Aeson.AutoType.Type
import Data.Aeson
import Data.Dynamic
-- | Hmm... this should be existential type?
type TypeDesc = String
-- | Operations that @SubtypPlugin@ must implement.
data SubtypePlugin = SubtypePlugin {
detect :: [Value] -> Maybe SubtypeDesc -- | Check whether a set of values belongs to this type family
, unify :: SubtypeDesc -> SubtypeDesc -> Either SubtypeDesc Type
}
-- | Description of a subtype
data SubtypeDesc = SubtypeDesc {
subtypeName :: String -- | Code that is different for different type families
, subtypeClass :: Type
, reference :: String -> String -- | Show type reference with a given name prefix
, declare :: String -- | Show type declaration
, typeInfo :: Dynamic
}