module Curry.FlatCurry.Annotated.Type
( module Curry.FlatCurry.Annotated.Type
, module Curry.FlatCurry.Typeable
, module Curry.FlatCurry.Type
) where
import Data.Binary
import Control.Monad
import Curry.FlatCurry.Typeable
import Curry.FlatCurry.Type ( QName, VarIndex, Visibility (..), TVarIndex
, TypeDecl (..), Kind (..), OpDecl (..), Fixity (..)
, TypeExpr (..), ConsDecl (..), NewConsDecl (..)
, Literal (..), CombType (..), CaseType (..)
)
data AProg a = AProg String [String] [TypeDecl] [AFuncDecl a] [OpDecl]
deriving (AProg a -> AProg a -> Bool
(AProg a -> AProg a -> Bool)
-> (AProg a -> AProg a -> Bool) -> Eq (AProg a)
forall a. Eq a => AProg a -> AProg a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AProg a -> AProg a -> Bool
$c/= :: forall a. Eq a => AProg a -> AProg a -> Bool
== :: AProg a -> AProg a -> Bool
$c== :: forall a. Eq a => AProg a -> AProg a -> Bool
Eq, ReadPrec [AProg a]
ReadPrec (AProg a)
Int -> ReadS (AProg a)
ReadS [AProg a]
(Int -> ReadS (AProg a))
-> ReadS [AProg a]
-> ReadPrec (AProg a)
-> ReadPrec [AProg a]
-> Read (AProg a)
forall a. Read a => ReadPrec [AProg a]
forall a. Read a => ReadPrec (AProg a)
forall a. Read a => Int -> ReadS (AProg a)
forall a. Read a => ReadS [AProg a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AProg a]
$creadListPrec :: forall a. Read a => ReadPrec [AProg a]
readPrec :: ReadPrec (AProg a)
$creadPrec :: forall a. Read a => ReadPrec (AProg a)
readList :: ReadS [AProg a]
$creadList :: forall a. Read a => ReadS [AProg a]
readsPrec :: Int -> ReadS (AProg a)
$creadsPrec :: forall a. Read a => Int -> ReadS (AProg a)
Read, Int -> AProg a -> ShowS
[AProg a] -> ShowS
AProg a -> String
(Int -> AProg a -> ShowS)
-> (AProg a -> String) -> ([AProg a] -> ShowS) -> Show (AProg a)
forall a. Show a => Int -> AProg a -> ShowS
forall a. Show a => [AProg a] -> ShowS
forall a. Show a => AProg a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AProg a] -> ShowS
$cshowList :: forall a. Show a => [AProg a] -> ShowS
show :: AProg a -> String
$cshow :: forall a. Show a => AProg a -> String
showsPrec :: Int -> AProg a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> AProg a -> ShowS
Show)
data AFuncDecl a = AFunc QName Int Visibility TypeExpr (ARule a)
deriving (AFuncDecl a -> AFuncDecl a -> Bool
(AFuncDecl a -> AFuncDecl a -> Bool)
-> (AFuncDecl a -> AFuncDecl a -> Bool) -> Eq (AFuncDecl a)
forall a. Eq a => AFuncDecl a -> AFuncDecl a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AFuncDecl a -> AFuncDecl a -> Bool
$c/= :: forall a. Eq a => AFuncDecl a -> AFuncDecl a -> Bool
== :: AFuncDecl a -> AFuncDecl a -> Bool
$c== :: forall a. Eq a => AFuncDecl a -> AFuncDecl a -> Bool
Eq, ReadPrec [AFuncDecl a]
ReadPrec (AFuncDecl a)
Int -> ReadS (AFuncDecl a)
ReadS [AFuncDecl a]
(Int -> ReadS (AFuncDecl a))
-> ReadS [AFuncDecl a]
-> ReadPrec (AFuncDecl a)
-> ReadPrec [AFuncDecl a]
-> Read (AFuncDecl a)
forall a. Read a => ReadPrec [AFuncDecl a]
forall a. Read a => ReadPrec (AFuncDecl a)
forall a. Read a => Int -> ReadS (AFuncDecl a)
forall a. Read a => ReadS [AFuncDecl a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AFuncDecl a]
$creadListPrec :: forall a. Read a => ReadPrec [AFuncDecl a]
readPrec :: ReadPrec (AFuncDecl a)
$creadPrec :: forall a. Read a => ReadPrec (AFuncDecl a)
readList :: ReadS [AFuncDecl a]
$creadList :: forall a. Read a => ReadS [AFuncDecl a]
readsPrec :: Int -> ReadS (AFuncDecl a)
$creadsPrec :: forall a. Read a => Int -> ReadS (AFuncDecl a)
Read, Int -> AFuncDecl a -> ShowS
[AFuncDecl a] -> ShowS
AFuncDecl a -> String
(Int -> AFuncDecl a -> ShowS)
-> (AFuncDecl a -> String)
-> ([AFuncDecl a] -> ShowS)
-> Show (AFuncDecl a)
forall a. Show a => Int -> AFuncDecl a -> ShowS
forall a. Show a => [AFuncDecl a] -> ShowS
forall a. Show a => AFuncDecl a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AFuncDecl a] -> ShowS
$cshowList :: forall a. Show a => [AFuncDecl a] -> ShowS
show :: AFuncDecl a -> String
$cshow :: forall a. Show a => AFuncDecl a -> String
showsPrec :: Int -> AFuncDecl a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> AFuncDecl a -> ShowS
Show)
data ARule a
= ARule a [(VarIndex, a)] (AExpr a)
| AExternal a String
deriving (ARule a -> ARule a -> Bool
(ARule a -> ARule a -> Bool)
-> (ARule a -> ARule a -> Bool) -> Eq (ARule a)
forall a. Eq a => ARule a -> ARule a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ARule a -> ARule a -> Bool
$c/= :: forall a. Eq a => ARule a -> ARule a -> Bool
== :: ARule a -> ARule a -> Bool
$c== :: forall a. Eq a => ARule a -> ARule a -> Bool
Eq, ReadPrec [ARule a]
ReadPrec (ARule a)
Int -> ReadS (ARule a)
ReadS [ARule a]
(Int -> ReadS (ARule a))
-> ReadS [ARule a]
-> ReadPrec (ARule a)
-> ReadPrec [ARule a]
-> Read (ARule a)
forall a. Read a => ReadPrec [ARule a]
forall a. Read a => ReadPrec (ARule a)
forall a. Read a => Int -> ReadS (ARule a)
forall a. Read a => ReadS [ARule a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ARule a]
$creadListPrec :: forall a. Read a => ReadPrec [ARule a]
readPrec :: ReadPrec (ARule a)
$creadPrec :: forall a. Read a => ReadPrec (ARule a)
readList :: ReadS [ARule a]
$creadList :: forall a. Read a => ReadS [ARule a]
readsPrec :: Int -> ReadS (ARule a)
$creadsPrec :: forall a. Read a => Int -> ReadS (ARule a)
Read, Int -> ARule a -> ShowS
[ARule a] -> ShowS
ARule a -> String
(Int -> ARule a -> ShowS)
-> (ARule a -> String) -> ([ARule a] -> ShowS) -> Show (ARule a)
forall a. Show a => Int -> ARule a -> ShowS
forall a. Show a => [ARule a] -> ShowS
forall a. Show a => ARule a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ARule a] -> ShowS
$cshowList :: forall a. Show a => [ARule a] -> ShowS
show :: ARule a -> String
$cshow :: forall a. Show a => ARule a -> String
showsPrec :: Int -> ARule a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> ARule a -> ShowS
Show)
data AExpr a
= AVar a VarIndex
| ALit a Literal
| AComb a CombType (QName, a) [AExpr a]
| ALet a [((VarIndex, a), AExpr a)] (AExpr a)
| AFree a [(VarIndex, a)] (AExpr a)
| AOr a (AExpr a) (AExpr a)
| ACase a CaseType (AExpr a) [ABranchExpr a]
| ATyped a (AExpr a) TypeExpr
deriving (AExpr a -> AExpr a -> Bool
(AExpr a -> AExpr a -> Bool)
-> (AExpr a -> AExpr a -> Bool) -> Eq (AExpr a)
forall a. Eq a => AExpr a -> AExpr a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AExpr a -> AExpr a -> Bool
$c/= :: forall a. Eq a => AExpr a -> AExpr a -> Bool
== :: AExpr a -> AExpr a -> Bool
$c== :: forall a. Eq a => AExpr a -> AExpr a -> Bool
Eq, ReadPrec [AExpr a]
ReadPrec (AExpr a)
Int -> ReadS (AExpr a)
ReadS [AExpr a]
(Int -> ReadS (AExpr a))
-> ReadS [AExpr a]
-> ReadPrec (AExpr a)
-> ReadPrec [AExpr a]
-> Read (AExpr a)
forall a. Read a => ReadPrec [AExpr a]
forall a. Read a => ReadPrec (AExpr a)
forall a. Read a => Int -> ReadS (AExpr a)
forall a. Read a => ReadS [AExpr a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AExpr a]
$creadListPrec :: forall a. Read a => ReadPrec [AExpr a]
readPrec :: ReadPrec (AExpr a)
$creadPrec :: forall a. Read a => ReadPrec (AExpr a)
readList :: ReadS [AExpr a]
$creadList :: forall a. Read a => ReadS [AExpr a]
readsPrec :: Int -> ReadS (AExpr a)
$creadsPrec :: forall a. Read a => Int -> ReadS (AExpr a)
Read, Int -> AExpr a -> ShowS
[AExpr a] -> ShowS
AExpr a -> String
(Int -> AExpr a -> ShowS)
-> (AExpr a -> String) -> ([AExpr a] -> ShowS) -> Show (AExpr a)
forall a. Show a => Int -> AExpr a -> ShowS
forall a. Show a => [AExpr a] -> ShowS
forall a. Show a => AExpr a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AExpr a] -> ShowS
$cshowList :: forall a. Show a => [AExpr a] -> ShowS
show :: AExpr a -> String
$cshow :: forall a. Show a => AExpr a -> String
showsPrec :: Int -> AExpr a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> AExpr a -> ShowS
Show)
data ABranchExpr a = ABranch (APattern a) (AExpr a)
deriving (ABranchExpr a -> ABranchExpr a -> Bool
(ABranchExpr a -> ABranchExpr a -> Bool)
-> (ABranchExpr a -> ABranchExpr a -> Bool) -> Eq (ABranchExpr a)
forall a. Eq a => ABranchExpr a -> ABranchExpr a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ABranchExpr a -> ABranchExpr a -> Bool
$c/= :: forall a. Eq a => ABranchExpr a -> ABranchExpr a -> Bool
== :: ABranchExpr a -> ABranchExpr a -> Bool
$c== :: forall a. Eq a => ABranchExpr a -> ABranchExpr a -> Bool
Eq, ReadPrec [ABranchExpr a]
ReadPrec (ABranchExpr a)
Int -> ReadS (ABranchExpr a)
ReadS [ABranchExpr a]
(Int -> ReadS (ABranchExpr a))
-> ReadS [ABranchExpr a]
-> ReadPrec (ABranchExpr a)
-> ReadPrec [ABranchExpr a]
-> Read (ABranchExpr a)
forall a. Read a => ReadPrec [ABranchExpr a]
forall a. Read a => ReadPrec (ABranchExpr a)
forall a. Read a => Int -> ReadS (ABranchExpr a)
forall a. Read a => ReadS [ABranchExpr a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ABranchExpr a]
$creadListPrec :: forall a. Read a => ReadPrec [ABranchExpr a]
readPrec :: ReadPrec (ABranchExpr a)
$creadPrec :: forall a. Read a => ReadPrec (ABranchExpr a)
readList :: ReadS [ABranchExpr a]
$creadList :: forall a. Read a => ReadS [ABranchExpr a]
readsPrec :: Int -> ReadS (ABranchExpr a)
$creadsPrec :: forall a. Read a => Int -> ReadS (ABranchExpr a)
Read, Int -> ABranchExpr a -> ShowS
[ABranchExpr a] -> ShowS
ABranchExpr a -> String
(Int -> ABranchExpr a -> ShowS)
-> (ABranchExpr a -> String)
-> ([ABranchExpr a] -> ShowS)
-> Show (ABranchExpr a)
forall a. Show a => Int -> ABranchExpr a -> ShowS
forall a. Show a => [ABranchExpr a] -> ShowS
forall a. Show a => ABranchExpr a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ABranchExpr a] -> ShowS
$cshowList :: forall a. Show a => [ABranchExpr a] -> ShowS
show :: ABranchExpr a -> String
$cshow :: forall a. Show a => ABranchExpr a -> String
showsPrec :: Int -> ABranchExpr a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> ABranchExpr a -> ShowS
Show)
data APattern a
= APattern a (QName, a) [(VarIndex, a)]
| ALPattern a Literal
deriving (APattern a -> APattern a -> Bool
(APattern a -> APattern a -> Bool)
-> (APattern a -> APattern a -> Bool) -> Eq (APattern a)
forall a. Eq a => APattern a -> APattern a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: APattern a -> APattern a -> Bool
$c/= :: forall a. Eq a => APattern a -> APattern a -> Bool
== :: APattern a -> APattern a -> Bool
$c== :: forall a. Eq a => APattern a -> APattern a -> Bool
Eq, ReadPrec [APattern a]
ReadPrec (APattern a)
Int -> ReadS (APattern a)
ReadS [APattern a]
(Int -> ReadS (APattern a))
-> ReadS [APattern a]
-> ReadPrec (APattern a)
-> ReadPrec [APattern a]
-> Read (APattern a)
forall a. Read a => ReadPrec [APattern a]
forall a. Read a => ReadPrec (APattern a)
forall a. Read a => Int -> ReadS (APattern a)
forall a. Read a => ReadS [APattern a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [APattern a]
$creadListPrec :: forall a. Read a => ReadPrec [APattern a]
readPrec :: ReadPrec (APattern a)
$creadPrec :: forall a. Read a => ReadPrec (APattern a)
readList :: ReadS [APattern a]
$creadList :: forall a. Read a => ReadS [APattern a]
readsPrec :: Int -> ReadS (APattern a)
$creadsPrec :: forall a. Read a => Int -> ReadS (APattern a)
Read, Int -> APattern a -> ShowS
[APattern a] -> ShowS
APattern a -> String
(Int -> APattern a -> ShowS)
-> (APattern a -> String)
-> ([APattern a] -> ShowS)
-> Show (APattern a)
forall a. Show a => Int -> APattern a -> ShowS
forall a. Show a => [APattern a] -> ShowS
forall a. Show a => APattern a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [APattern a] -> ShowS
$cshowList :: forall a. Show a => [APattern a] -> ShowS
show :: APattern a -> String
$cshow :: forall a. Show a => APattern a -> String
showsPrec :: Int -> APattern a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> APattern a -> ShowS
Show)
instance Typeable a => Typeable (AExpr a) where
typeOf :: AExpr a -> TypeExpr
typeOf (AVar a :: a
a _) = a -> TypeExpr
forall a. Typeable a => a -> TypeExpr
typeOf a
a
typeOf (ALit a :: a
a _) = a -> TypeExpr
forall a. Typeable a => a -> TypeExpr
typeOf a
a
typeOf (AComb a :: a
a _ _ _) = a -> TypeExpr
forall a. Typeable a => a -> TypeExpr
typeOf a
a
typeOf (ALet a :: a
a _ _) = a -> TypeExpr
forall a. Typeable a => a -> TypeExpr
typeOf a
a
typeOf (AFree a :: a
a _ _) = a -> TypeExpr
forall a. Typeable a => a -> TypeExpr
typeOf a
a
typeOf (AOr a :: a
a _ _) = a -> TypeExpr
forall a. Typeable a => a -> TypeExpr
typeOf a
a
typeOf (ACase a :: a
a _ _ _) = a -> TypeExpr
forall a. Typeable a => a -> TypeExpr
typeOf a
a
typeOf (ATyped a :: a
a _ _) = a -> TypeExpr
forall a. Typeable a => a -> TypeExpr
typeOf a
a
instance Typeable a => Typeable (APattern a) where
typeOf :: APattern a -> TypeExpr
typeOf (APattern a :: a
a _ _) = a -> TypeExpr
forall a. Typeable a => a -> TypeExpr
typeOf a
a
typeOf (ALPattern a :: a
a _) = a -> TypeExpr
forall a. Typeable a => a -> TypeExpr
typeOf a
a
instance Binary a => Binary (AProg a) where
put :: AProg a -> Put
put (AProg mid :: String
mid im :: [String]
im tys :: [TypeDecl]
tys fus :: [AFuncDecl a]
fus ops :: [OpDecl]
ops) =
String -> Put
forall t. Binary t => t -> Put
put String
mid Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [String] -> Put
forall t. Binary t => t -> Put
put [String]
im Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [TypeDecl] -> Put
forall t. Binary t => t -> Put
put [TypeDecl]
tys Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [AFuncDecl a] -> Put
forall t. Binary t => t -> Put
put [AFuncDecl a]
fus Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [OpDecl] -> Put
forall t. Binary t => t -> Put
put [OpDecl]
ops
get :: Get (AProg a)
get = String
-> [String] -> [TypeDecl] -> [AFuncDecl a] -> [OpDecl] -> AProg a
forall a.
String
-> [String] -> [TypeDecl] -> [AFuncDecl a] -> [OpDecl] -> AProg a
AProg (String
-> [String] -> [TypeDecl] -> [AFuncDecl a] -> [OpDecl] -> AProg a)
-> Get String
-> Get
([String] -> [TypeDecl] -> [AFuncDecl a] -> [OpDecl] -> AProg a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get String
forall t. Binary t => Get t
get Get
([String] -> [TypeDecl] -> [AFuncDecl a] -> [OpDecl] -> AProg a)
-> Get [String]
-> Get ([TypeDecl] -> [AFuncDecl a] -> [OpDecl] -> AProg a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get [String]
forall t. Binary t => Get t
get Get ([TypeDecl] -> [AFuncDecl a] -> [OpDecl] -> AProg a)
-> Get [TypeDecl] -> Get ([AFuncDecl a] -> [OpDecl] -> AProg a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get [TypeDecl]
forall t. Binary t => Get t
get Get ([AFuncDecl a] -> [OpDecl] -> AProg a)
-> Get [AFuncDecl a] -> Get ([OpDecl] -> AProg a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get [AFuncDecl a]
forall t. Binary t => Get t
get Get ([OpDecl] -> AProg a) -> Get [OpDecl] -> Get (AProg a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get [OpDecl]
forall t. Binary t => Get t
get
instance Binary a => Binary (AFuncDecl a) where
put :: AFuncDecl a -> Put
put (AFunc qid :: QName
qid arity :: Int
arity vis :: Visibility
vis ty :: TypeExpr
ty r :: ARule a
r) =
QName -> Put
forall t. Binary t => t -> Put
put QName
qid Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Int -> Put
forall t. Binary t => t -> Put
put Int
arity Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Visibility -> Put
forall t. Binary t => t -> Put
put Visibility
vis Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> TypeExpr -> Put
forall t. Binary t => t -> Put
put TypeExpr
ty Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ARule a -> Put
forall t. Binary t => t -> Put
put ARule a
r
get :: Get (AFuncDecl a)
get = QName -> Int -> Visibility -> TypeExpr -> ARule a -> AFuncDecl a
forall a.
QName -> Int -> Visibility -> TypeExpr -> ARule a -> AFuncDecl a
AFunc (QName -> Int -> Visibility -> TypeExpr -> ARule a -> AFuncDecl a)
-> Get QName
-> Get (Int -> Visibility -> TypeExpr -> ARule a -> AFuncDecl a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get QName
forall t. Binary t => Get t
get Get (Int -> Visibility -> TypeExpr -> ARule a -> AFuncDecl a)
-> Get Int
-> Get (Visibility -> TypeExpr -> ARule a -> AFuncDecl a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get Int
forall t. Binary t => Get t
get Get (Visibility -> TypeExpr -> ARule a -> AFuncDecl a)
-> Get Visibility -> Get (TypeExpr -> ARule a -> AFuncDecl a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get Visibility
forall t. Binary t => Get t
get Get (TypeExpr -> ARule a -> AFuncDecl a)
-> Get TypeExpr -> Get (ARule a -> AFuncDecl a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get TypeExpr
forall t. Binary t => Get t
get Get (ARule a -> AFuncDecl a) -> Get (ARule a) -> Get (AFuncDecl a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get (ARule a)
forall t. Binary t => Get t
get
instance Binary a => Binary (ARule a) where
put :: ARule a -> Put
put (ARule a :: a
a alts :: [(Int, a)]
alts e :: AExpr a
e) = Word8 -> Put
putWord8 0 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall t. Binary t => t -> Put
put a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [(Int, a)] -> Put
forall t. Binary t => t -> Put
put [(Int, a)]
alts Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> AExpr a -> Put
forall t. Binary t => t -> Put
put AExpr a
e
put (AExternal ty :: a
ty n :: String
n ) = Word8 -> Put
putWord8 1 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall t. Binary t => t -> Put
put a
ty Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> Put
forall t. Binary t => t -> Put
put String
n
get :: Get (ARule a)
get = do
Word8
x <- Get Word8
getWord8
case Word8
x of
0 -> (a -> [(Int, a)] -> AExpr a -> ARule a)
-> Get a -> Get [(Int, a)] -> Get (AExpr a) -> Get (ARule a)
forall (m :: * -> *) a1 a2 a3 r.
Monad m =>
(a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
liftM3 a -> [(Int, a)] -> AExpr a -> ARule a
forall a. a -> [(Int, a)] -> AExpr a -> ARule a
ARule Get a
forall t. Binary t => Get t
get Get [(Int, a)]
forall t. Binary t => Get t
get Get (AExpr a)
forall t. Binary t => Get t
get
1 -> (a -> String -> ARule a) -> Get a -> Get String -> Get (ARule a)
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 a -> String -> ARule a
forall a. a -> String -> ARule a
AExternal Get a
forall t. Binary t => Get t
get Get String
forall t. Binary t => Get t
get
_ -> String -> Get (ARule a)
forall (m :: * -> *) a. MonadFail m => String -> m a
fail "Invalid encoding for TRule"
instance Binary a => Binary (AExpr a) where
put :: AExpr a -> Put
put (AVar a :: a
a v :: Int
v) = Word8 -> Put
putWord8 0 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall t. Binary t => t -> Put
put a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Int -> Put
forall t. Binary t => t -> Put
put Int
v
put (ALit a :: a
a l :: Literal
l) = Word8 -> Put
putWord8 1 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall t. Binary t => t -> Put
put a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Literal -> Put
forall t. Binary t => t -> Put
put Literal
l
put (AComb a :: a
a cty :: CombType
cty qid :: (QName, a)
qid es :: [AExpr a]
es) =
Word8 -> Put
putWord8 2 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall t. Binary t => t -> Put
put a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> CombType -> Put
forall t. Binary t => t -> Put
put CombType
cty Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (QName, a) -> Put
forall t. Binary t => t -> Put
put (QName, a)
qid Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [AExpr a] -> Put
forall t. Binary t => t -> Put
put [AExpr a]
es
put (ALet a :: a
a bs :: [((Int, a), AExpr a)]
bs e :: AExpr a
e ) = Word8 -> Put
putWord8 3 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall t. Binary t => t -> Put
put a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [((Int, a), AExpr a)] -> Put
forall t. Binary t => t -> Put
put [((Int, a), AExpr a)]
bs Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> AExpr a -> Put
forall t. Binary t => t -> Put
put AExpr a
e
put (AFree a :: a
a vs :: [(Int, a)]
vs e :: AExpr a
e ) = Word8 -> Put
putWord8 4 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall t. Binary t => t -> Put
put a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [(Int, a)] -> Put
forall t. Binary t => t -> Put
put [(Int, a)]
vs Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> AExpr a -> Put
forall t. Binary t => t -> Put
put AExpr a
e
put (AOr a :: a
a e1 :: AExpr a
e1 e2 :: AExpr a
e2) = Word8 -> Put
putWord8 5 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall t. Binary t => t -> Put
put a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> AExpr a -> Put
forall t. Binary t => t -> Put
put AExpr a
e1 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> AExpr a -> Put
forall t. Binary t => t -> Put
put AExpr a
e2
put (ACase a :: a
a cty :: CaseType
cty ty :: AExpr a
ty as :: [ABranchExpr a]
as) = Word8 -> Put
putWord8 6 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall t. Binary t => t -> Put
put a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> CaseType -> Put
forall t. Binary t => t -> Put
put CaseType
cty Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> AExpr a -> Put
forall t. Binary t => t -> Put
put AExpr a
ty Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [ABranchExpr a] -> Put
forall t. Binary t => t -> Put
put [ABranchExpr a]
as
put (ATyped a :: a
a e :: AExpr a
e ty :: TypeExpr
ty) = Word8 -> Put
putWord8 7 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall t. Binary t => t -> Put
put a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> AExpr a -> Put
forall t. Binary t => t -> Put
put AExpr a
e Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> TypeExpr -> Put
forall t. Binary t => t -> Put
put TypeExpr
ty
get :: Get (AExpr a)
get = do
Word8
x <- Get Word8
getWord8
case Word8
x of
0 -> (a -> Int -> AExpr a) -> Get a -> Get Int -> Get (AExpr a)
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 a -> Int -> AExpr a
forall a. a -> Int -> AExpr a
AVar Get a
forall t. Binary t => Get t
get Get Int
forall t. Binary t => Get t
get
1 -> (a -> Literal -> AExpr a) -> Get a -> Get Literal -> Get (AExpr a)
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 a -> Literal -> AExpr a
forall a. a -> Literal -> AExpr a
ALit Get a
forall t. Binary t => Get t
get Get Literal
forall t. Binary t => Get t
get
2 -> (a -> CombType -> (QName, a) -> [AExpr a] -> AExpr a)
-> Get a
-> Get CombType
-> Get (QName, a)
-> Get [AExpr a]
-> Get (AExpr a)
forall (m :: * -> *) a1 a2 a3 a4 r.
Monad m =>
(a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r
liftM4 a -> CombType -> (QName, a) -> [AExpr a] -> AExpr a
forall a. a -> CombType -> (QName, a) -> [AExpr a] -> AExpr a
AComb Get a
forall t. Binary t => Get t
get Get CombType
forall t. Binary t => Get t
get Get (QName, a)
forall t. Binary t => Get t
get Get [AExpr a]
forall t. Binary t => Get t
get
3 -> (a -> [((Int, a), AExpr a)] -> AExpr a -> AExpr a)
-> Get a
-> Get [((Int, a), AExpr a)]
-> Get (AExpr a)
-> Get (AExpr a)
forall (m :: * -> *) a1 a2 a3 r.
Monad m =>
(a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
liftM3 a -> [((Int, a), AExpr a)] -> AExpr a -> AExpr a
forall a. a -> [((Int, a), AExpr a)] -> AExpr a -> AExpr a
ALet Get a
forall t. Binary t => Get t
get Get [((Int, a), AExpr a)]
forall t. Binary t => Get t
get Get (AExpr a)
forall t. Binary t => Get t
get
4 -> (a -> [(Int, a)] -> AExpr a -> AExpr a)
-> Get a -> Get [(Int, a)] -> Get (AExpr a) -> Get (AExpr a)
forall (m :: * -> *) a1 a2 a3 r.
Monad m =>
(a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
liftM3 a -> [(Int, a)] -> AExpr a -> AExpr a
forall a. a -> [(Int, a)] -> AExpr a -> AExpr a
AFree Get a
forall t. Binary t => Get t
get Get [(Int, a)]
forall t. Binary t => Get t
get Get (AExpr a)
forall t. Binary t => Get t
get
5 -> (a -> AExpr a -> AExpr a -> AExpr a)
-> Get a -> Get (AExpr a) -> Get (AExpr a) -> Get (AExpr a)
forall (m :: * -> *) a1 a2 a3 r.
Monad m =>
(a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
liftM3 a -> AExpr a -> AExpr a -> AExpr a
forall a. a -> AExpr a -> AExpr a -> AExpr a
AOr Get a
forall t. Binary t => Get t
get Get (AExpr a)
forall t. Binary t => Get t
get Get (AExpr a)
forall t. Binary t => Get t
get
6 -> (a -> CaseType -> AExpr a -> [ABranchExpr a] -> AExpr a)
-> Get a
-> Get CaseType
-> Get (AExpr a)
-> Get [ABranchExpr a]
-> Get (AExpr a)
forall (m :: * -> *) a1 a2 a3 a4 r.
Monad m =>
(a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r
liftM4 a -> CaseType -> AExpr a -> [ABranchExpr a] -> AExpr a
forall a. a -> CaseType -> AExpr a -> [ABranchExpr a] -> AExpr a
ACase Get a
forall t. Binary t => Get t
get Get CaseType
forall t. Binary t => Get t
get Get (AExpr a)
forall t. Binary t => Get t
get Get [ABranchExpr a]
forall t. Binary t => Get t
get
7 -> (a -> AExpr a -> TypeExpr -> AExpr a)
-> Get a -> Get (AExpr a) -> Get TypeExpr -> Get (AExpr a)
forall (m :: * -> *) a1 a2 a3 r.
Monad m =>
(a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
liftM3 a -> AExpr a -> TypeExpr -> AExpr a
forall a. a -> AExpr a -> TypeExpr -> AExpr a
ATyped Get a
forall t. Binary t => Get t
get Get (AExpr a)
forall t. Binary t => Get t
get Get TypeExpr
forall t. Binary t => Get t
get
_ -> String -> Get (AExpr a)
forall (m :: * -> *) a. MonadFail m => String -> m a
fail "Invalid encoding for TExpr"
instance Binary a => Binary (ABranchExpr a) where
put :: ABranchExpr a -> Put
put (ABranch p :: APattern a
p e :: AExpr a
e) = APattern a -> Put
forall t. Binary t => t -> Put
put APattern a
p Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> AExpr a -> Put
forall t. Binary t => t -> Put
put AExpr a
e
get :: Get (ABranchExpr a)
get = (APattern a -> AExpr a -> ABranchExpr a)
-> Get (APattern a) -> Get (AExpr a) -> Get (ABranchExpr a)
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 APattern a -> AExpr a -> ABranchExpr a
forall a. APattern a -> AExpr a -> ABranchExpr a
ABranch Get (APattern a)
forall t. Binary t => Get t
get Get (AExpr a)
forall t. Binary t => Get t
get
instance Binary a => Binary (APattern a) where
put :: APattern a -> Put
put (APattern a :: a
a qid :: (QName, a)
qid vs :: [(Int, a)]
vs) = Word8 -> Put
putWord8 0 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall t. Binary t => t -> Put
put a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (QName, a) -> Put
forall t. Binary t => t -> Put
put (QName, a)
qid Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [(Int, a)] -> Put
forall t. Binary t => t -> Put
put [(Int, a)]
vs
put (ALPattern a :: a
a l :: Literal
l ) = Word8 -> Put
putWord8 1 Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall t. Binary t => t -> Put
put a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Literal -> Put
forall t. Binary t => t -> Put
put Literal
l
get :: Get (APattern a)
get = do
Word8
x <- Get Word8
getWord8
case Word8
x of
0 -> (a -> (QName, a) -> [(Int, a)] -> APattern a)
-> Get a -> Get (QName, a) -> Get [(Int, a)] -> Get (APattern a)
forall (m :: * -> *) a1 a2 a3 r.
Monad m =>
(a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
liftM3 a -> (QName, a) -> [(Int, a)] -> APattern a
forall a. a -> (QName, a) -> [(Int, a)] -> APattern a
APattern Get a
forall t. Binary t => Get t
get Get (QName, a)
forall t. Binary t => Get t
get Get [(Int, a)]
forall t. Binary t => Get t
get
1 -> (a -> Literal -> APattern a)
-> Get a -> Get Literal -> Get (APattern a)
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 a -> Literal -> APattern a
forall a. a -> Literal -> APattern a
ALPattern Get a
forall t. Binary t => Get t
get Get Literal
forall t. Binary t => Get t
get
_ -> String -> Get (APattern a)
forall (m :: * -> *) a. MonadFail m => String -> m a
fail "Invalid encoding for TPattern"