-- File generated by the BNF Converter (bnfc 2.9.4).

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

-- | The abstract syntax of language Syntax.

module RSTT.Syntax.Abs where

import Prelude (String)
import qualified Prelude as C (Eq, Ord, Show, Read)
import qualified Data.String

data Program = Program [Decl]
  deriving (Program -> Program -> Bool
(Program -> Program -> Bool)
-> (Program -> Program -> Bool) -> Eq Program
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Program -> Program -> Bool
$c/= :: Program -> Program -> Bool
== :: Program -> Program -> Bool
$c== :: Program -> Program -> Bool
C.Eq, Eq Program
Eq Program
-> (Program -> Program -> Ordering)
-> (Program -> Program -> Bool)
-> (Program -> Program -> Bool)
-> (Program -> Program -> Bool)
-> (Program -> Program -> Bool)
-> (Program -> Program -> Program)
-> (Program -> Program -> Program)
-> Ord Program
Program -> Program -> Bool
Program -> Program -> Ordering
Program -> Program -> Program
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Program -> Program -> Program
$cmin :: Program -> Program -> Program
max :: Program -> Program -> Program
$cmax :: Program -> Program -> Program
>= :: Program -> Program -> Bool
$c>= :: Program -> Program -> Bool
> :: Program -> Program -> Bool
$c> :: Program -> Program -> Bool
<= :: Program -> Program -> Bool
$c<= :: Program -> Program -> Bool
< :: Program -> Program -> Bool
$c< :: Program -> Program -> Bool
compare :: Program -> Program -> Ordering
$ccompare :: Program -> Program -> Ordering
C.Ord, Int -> Program -> ShowS
[Program] -> ShowS
Program -> String
(Int -> Program -> ShowS)
-> (Program -> String) -> ([Program] -> ShowS) -> Show Program
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Program] -> ShowS
$cshowList :: [Program] -> ShowS
show :: Program -> String
$cshow :: Program -> String
showsPrec :: Int -> Program -> ShowS
$cshowsPrec :: Int -> Program -> ShowS
C.Show, ReadPrec [Program]
ReadPrec Program
Int -> ReadS Program
ReadS [Program]
(Int -> ReadS Program)
-> ReadS [Program]
-> ReadPrec Program
-> ReadPrec [Program]
-> Read Program
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Program]
$creadListPrec :: ReadPrec [Program]
readPrec :: ReadPrec Program
$creadPrec :: ReadPrec Program
readList :: ReadS [Program]
$creadList :: ReadS [Program]
readsPrec :: Int -> ReadS Program
$creadsPrec :: Int -> ReadS Program
C.Read)

data Decl
    = DeclCube Label [PointConDecl]
    | DeclTopePrefix Label [Cube] [TopeRule]
    | DeclShape Var Shape
    | DeclCommandProve Sequent
    | DeclCommandRenderLatex Shape
  deriving (Decl -> Decl -> Bool
(Decl -> Decl -> Bool) -> (Decl -> Decl -> Bool) -> Eq Decl
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Decl -> Decl -> Bool
$c/= :: Decl -> Decl -> Bool
== :: Decl -> Decl -> Bool
$c== :: Decl -> Decl -> Bool
C.Eq, Eq Decl
Eq Decl
-> (Decl -> Decl -> Ordering)
-> (Decl -> Decl -> Bool)
-> (Decl -> Decl -> Bool)
-> (Decl -> Decl -> Bool)
-> (Decl -> Decl -> Bool)
-> (Decl -> Decl -> Decl)
-> (Decl -> Decl -> Decl)
-> Ord Decl
Decl -> Decl -> Bool
Decl -> Decl -> Ordering
Decl -> Decl -> Decl
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Decl -> Decl -> Decl
$cmin :: Decl -> Decl -> Decl
max :: Decl -> Decl -> Decl
$cmax :: Decl -> Decl -> Decl
>= :: Decl -> Decl -> Bool
$c>= :: Decl -> Decl -> Bool
> :: Decl -> Decl -> Bool
$c> :: Decl -> Decl -> Bool
<= :: Decl -> Decl -> Bool
$c<= :: Decl -> Decl -> Bool
< :: Decl -> Decl -> Bool
$c< :: Decl -> Decl -> Bool
compare :: Decl -> Decl -> Ordering
$ccompare :: Decl -> Decl -> Ordering
C.Ord, Int -> Decl -> ShowS
[Decl] -> ShowS
Decl -> String
(Int -> Decl -> ShowS)
-> (Decl -> String) -> ([Decl] -> ShowS) -> Show Decl
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Decl] -> ShowS
$cshowList :: [Decl] -> ShowS
show :: Decl -> String
$cshow :: Decl -> String
showsPrec :: Int -> Decl -> ShowS
$cshowsPrec :: Int -> Decl -> ShowS
C.Show, ReadPrec [Decl]
ReadPrec Decl
Int -> ReadS Decl
ReadS [Decl]
(Int -> ReadS Decl)
-> ReadS [Decl] -> ReadPrec Decl -> ReadPrec [Decl] -> Read Decl
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Decl]
$creadListPrec :: ReadPrec [Decl]
readPrec :: ReadPrec Decl
$creadPrec :: ReadPrec Decl
readList :: ReadS [Decl]
$creadList :: ReadS [Decl]
readsPrec :: Int -> ReadS Decl
$creadsPrec :: Int -> ReadS Decl
C.Read)

data Shape = Shape PointPattern Cube Tope
  deriving (Shape -> Shape -> Bool
(Shape -> Shape -> Bool) -> (Shape -> Shape -> Bool) -> Eq Shape
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Shape -> Shape -> Bool
$c/= :: Shape -> Shape -> Bool
== :: Shape -> Shape -> Bool
$c== :: Shape -> Shape -> Bool
C.Eq, Eq Shape
Eq Shape
-> (Shape -> Shape -> Ordering)
-> (Shape -> Shape -> Bool)
-> (Shape -> Shape -> Bool)
-> (Shape -> Shape -> Bool)
-> (Shape -> Shape -> Bool)
-> (Shape -> Shape -> Shape)
-> (Shape -> Shape -> Shape)
-> Ord Shape
Shape -> Shape -> Bool
Shape -> Shape -> Ordering
Shape -> Shape -> Shape
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Shape -> Shape -> Shape
$cmin :: Shape -> Shape -> Shape
max :: Shape -> Shape -> Shape
$cmax :: Shape -> Shape -> Shape
>= :: Shape -> Shape -> Bool
$c>= :: Shape -> Shape -> Bool
> :: Shape -> Shape -> Bool
$c> :: Shape -> Shape -> Bool
<= :: Shape -> Shape -> Bool
$c<= :: Shape -> Shape -> Bool
< :: Shape -> Shape -> Bool
$c< :: Shape -> Shape -> Bool
compare :: Shape -> Shape -> Ordering
$ccompare :: Shape -> Shape -> Ordering
C.Ord, Int -> Shape -> ShowS
[Shape] -> ShowS
Shape -> String
(Int -> Shape -> ShowS)
-> (Shape -> String) -> ([Shape] -> ShowS) -> Show Shape
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Shape] -> ShowS
$cshowList :: [Shape] -> ShowS
show :: Shape -> String
$cshow :: Shape -> String
showsPrec :: Int -> Shape -> ShowS
$cshowsPrec :: Int -> Shape -> ShowS
C.Show, ReadPrec [Shape]
ReadPrec Shape
Int -> ReadS Shape
ReadS [Shape]
(Int -> ReadS Shape)
-> ReadS [Shape]
-> ReadPrec Shape
-> ReadPrec [Shape]
-> Read Shape
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Shape]
$creadListPrec :: ReadPrec [Shape]
readPrec :: ReadPrec Shape
$creadPrec :: ReadPrec Shape
readList :: ReadS [Shape]
$creadList :: ReadS [Shape]
readsPrec :: Int -> ReadS Shape
$creadsPrec :: Int -> ReadS Shape
C.Read)

data PointPattern
    = PointPatternVar Var | PointPatternPair PointPattern PointPattern
  deriving (PointPattern -> PointPattern -> Bool
(PointPattern -> PointPattern -> Bool)
-> (PointPattern -> PointPattern -> Bool) -> Eq PointPattern
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PointPattern -> PointPattern -> Bool
$c/= :: PointPattern -> PointPattern -> Bool
== :: PointPattern -> PointPattern -> Bool
$c== :: PointPattern -> PointPattern -> Bool
C.Eq, Eq PointPattern
Eq PointPattern
-> (PointPattern -> PointPattern -> Ordering)
-> (PointPattern -> PointPattern -> Bool)
-> (PointPattern -> PointPattern -> Bool)
-> (PointPattern -> PointPattern -> Bool)
-> (PointPattern -> PointPattern -> Bool)
-> (PointPattern -> PointPattern -> PointPattern)
-> (PointPattern -> PointPattern -> PointPattern)
-> Ord PointPattern
PointPattern -> PointPattern -> Bool
PointPattern -> PointPattern -> Ordering
PointPattern -> PointPattern -> PointPattern
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: PointPattern -> PointPattern -> PointPattern
$cmin :: PointPattern -> PointPattern -> PointPattern
max :: PointPattern -> PointPattern -> PointPattern
$cmax :: PointPattern -> PointPattern -> PointPattern
>= :: PointPattern -> PointPattern -> Bool
$c>= :: PointPattern -> PointPattern -> Bool
> :: PointPattern -> PointPattern -> Bool
$c> :: PointPattern -> PointPattern -> Bool
<= :: PointPattern -> PointPattern -> Bool
$c<= :: PointPattern -> PointPattern -> Bool
< :: PointPattern -> PointPattern -> Bool
$c< :: PointPattern -> PointPattern -> Bool
compare :: PointPattern -> PointPattern -> Ordering
$ccompare :: PointPattern -> PointPattern -> Ordering
C.Ord, Int -> PointPattern -> ShowS
[PointPattern] -> ShowS
PointPattern -> String
(Int -> PointPattern -> ShowS)
-> (PointPattern -> String)
-> ([PointPattern] -> ShowS)
-> Show PointPattern
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PointPattern] -> ShowS
$cshowList :: [PointPattern] -> ShowS
show :: PointPattern -> String
$cshow :: PointPattern -> String
showsPrec :: Int -> PointPattern -> ShowS
$cshowsPrec :: Int -> PointPattern -> ShowS
C.Show, ReadPrec [PointPattern]
ReadPrec PointPattern
Int -> ReadS PointPattern
ReadS [PointPattern]
(Int -> ReadS PointPattern)
-> ReadS [PointPattern]
-> ReadPrec PointPattern
-> ReadPrec [PointPattern]
-> Read PointPattern
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PointPattern]
$creadListPrec :: ReadPrec [PointPattern]
readPrec :: ReadPrec PointPattern
$creadPrec :: ReadPrec PointPattern
readList :: ReadS [PointPattern]
$creadList :: ReadS [PointPattern]
readsPrec :: Int -> ReadS PointPattern
$creadsPrec :: Int -> ReadS PointPattern
C.Read)

data PointConDecl
    = NullaryPointConDecl Label | PrefixPointConDecl Label [Cube]
  deriving (PointConDecl -> PointConDecl -> Bool
(PointConDecl -> PointConDecl -> Bool)
-> (PointConDecl -> PointConDecl -> Bool) -> Eq PointConDecl
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PointConDecl -> PointConDecl -> Bool
$c/= :: PointConDecl -> PointConDecl -> Bool
== :: PointConDecl -> PointConDecl -> Bool
$c== :: PointConDecl -> PointConDecl -> Bool
C.Eq, Eq PointConDecl
Eq PointConDecl
-> (PointConDecl -> PointConDecl -> Ordering)
-> (PointConDecl -> PointConDecl -> Bool)
-> (PointConDecl -> PointConDecl -> Bool)
-> (PointConDecl -> PointConDecl -> Bool)
-> (PointConDecl -> PointConDecl -> Bool)
-> (PointConDecl -> PointConDecl -> PointConDecl)
-> (PointConDecl -> PointConDecl -> PointConDecl)
-> Ord PointConDecl
PointConDecl -> PointConDecl -> Bool
PointConDecl -> PointConDecl -> Ordering
PointConDecl -> PointConDecl -> PointConDecl
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: PointConDecl -> PointConDecl -> PointConDecl
$cmin :: PointConDecl -> PointConDecl -> PointConDecl
max :: PointConDecl -> PointConDecl -> PointConDecl
$cmax :: PointConDecl -> PointConDecl -> PointConDecl
>= :: PointConDecl -> PointConDecl -> Bool
$c>= :: PointConDecl -> PointConDecl -> Bool
> :: PointConDecl -> PointConDecl -> Bool
$c> :: PointConDecl -> PointConDecl -> Bool
<= :: PointConDecl -> PointConDecl -> Bool
$c<= :: PointConDecl -> PointConDecl -> Bool
< :: PointConDecl -> PointConDecl -> Bool
$c< :: PointConDecl -> PointConDecl -> Bool
compare :: PointConDecl -> PointConDecl -> Ordering
$ccompare :: PointConDecl -> PointConDecl -> Ordering
C.Ord, Int -> PointConDecl -> ShowS
[PointConDecl] -> ShowS
PointConDecl -> String
(Int -> PointConDecl -> ShowS)
-> (PointConDecl -> String)
-> ([PointConDecl] -> ShowS)
-> Show PointConDecl
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PointConDecl] -> ShowS
$cshowList :: [PointConDecl] -> ShowS
show :: PointConDecl -> String
$cshow :: PointConDecl -> String
showsPrec :: Int -> PointConDecl -> ShowS
$cshowsPrec :: Int -> PointConDecl -> ShowS
C.Show, ReadPrec [PointConDecl]
ReadPrec PointConDecl
Int -> ReadS PointConDecl
ReadS [PointConDecl]
(Int -> ReadS PointConDecl)
-> ReadS [PointConDecl]
-> ReadPrec PointConDecl
-> ReadPrec [PointConDecl]
-> Read PointConDecl
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PointConDecl]
$creadListPrec :: ReadPrec [PointConDecl]
readPrec :: ReadPrec PointConDecl
$creadPrec :: ReadPrec PointConDecl
readList :: ReadS [PointConDecl]
$creadList :: ReadS [PointConDecl]
readsPrec :: Int -> ReadS PointConDecl
$creadsPrec :: Int -> ReadS PointConDecl
C.Read)

data Cube
    = CubeProduct Cube Cube | CubeUnit | CubeCon Label | CubeVar Var
  deriving (Cube -> Cube -> Bool
(Cube -> Cube -> Bool) -> (Cube -> Cube -> Bool) -> Eq Cube
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Cube -> Cube -> Bool
$c/= :: Cube -> Cube -> Bool
== :: Cube -> Cube -> Bool
$c== :: Cube -> Cube -> Bool
C.Eq, Eq Cube
Eq Cube
-> (Cube -> Cube -> Ordering)
-> (Cube -> Cube -> Bool)
-> (Cube -> Cube -> Bool)
-> (Cube -> Cube -> Bool)
-> (Cube -> Cube -> Bool)
-> (Cube -> Cube -> Cube)
-> (Cube -> Cube -> Cube)
-> Ord Cube
Cube -> Cube -> Bool
Cube -> Cube -> Ordering
Cube -> Cube -> Cube
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Cube -> Cube -> Cube
$cmin :: Cube -> Cube -> Cube
max :: Cube -> Cube -> Cube
$cmax :: Cube -> Cube -> Cube
>= :: Cube -> Cube -> Bool
$c>= :: Cube -> Cube -> Bool
> :: Cube -> Cube -> Bool
$c> :: Cube -> Cube -> Bool
<= :: Cube -> Cube -> Bool
$c<= :: Cube -> Cube -> Bool
< :: Cube -> Cube -> Bool
$c< :: Cube -> Cube -> Bool
compare :: Cube -> Cube -> Ordering
$ccompare :: Cube -> Cube -> Ordering
C.Ord, Int -> Cube -> ShowS
[Cube] -> ShowS
Cube -> String
(Int -> Cube -> ShowS)
-> (Cube -> String) -> ([Cube] -> ShowS) -> Show Cube
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Cube] -> ShowS
$cshowList :: [Cube] -> ShowS
show :: Cube -> String
$cshow :: Cube -> String
showsPrec :: Int -> Cube -> ShowS
$cshowsPrec :: Int -> Cube -> ShowS
C.Show, ReadPrec [Cube]
ReadPrec Cube
Int -> ReadS Cube
ReadS [Cube]
(Int -> ReadS Cube)
-> ReadS [Cube] -> ReadPrec Cube -> ReadPrec [Cube] -> Read Cube
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Cube]
$creadListPrec :: ReadPrec [Cube]
readPrec :: ReadPrec Cube
$creadPrec :: ReadPrec Cube
readList :: ReadS [Cube]
$creadList :: ReadS [Cube]
readsPrec :: Int -> ReadS Cube
$creadsPrec :: Int -> ReadS Cube
C.Read)

data TopeRule = TopeRule RuleName [Sequent] Line Sequent
  deriving (TopeRule -> TopeRule -> Bool
(TopeRule -> TopeRule -> Bool)
-> (TopeRule -> TopeRule -> Bool) -> Eq TopeRule
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TopeRule -> TopeRule -> Bool
$c/= :: TopeRule -> TopeRule -> Bool
== :: TopeRule -> TopeRule -> Bool
$c== :: TopeRule -> TopeRule -> Bool
C.Eq, Eq TopeRule
Eq TopeRule
-> (TopeRule -> TopeRule -> Ordering)
-> (TopeRule -> TopeRule -> Bool)
-> (TopeRule -> TopeRule -> Bool)
-> (TopeRule -> TopeRule -> Bool)
-> (TopeRule -> TopeRule -> Bool)
-> (TopeRule -> TopeRule -> TopeRule)
-> (TopeRule -> TopeRule -> TopeRule)
-> Ord TopeRule
TopeRule -> TopeRule -> Bool
TopeRule -> TopeRule -> Ordering
TopeRule -> TopeRule -> TopeRule
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TopeRule -> TopeRule -> TopeRule
$cmin :: TopeRule -> TopeRule -> TopeRule
max :: TopeRule -> TopeRule -> TopeRule
$cmax :: TopeRule -> TopeRule -> TopeRule
>= :: TopeRule -> TopeRule -> Bool
$c>= :: TopeRule -> TopeRule -> Bool
> :: TopeRule -> TopeRule -> Bool
$c> :: TopeRule -> TopeRule -> Bool
<= :: TopeRule -> TopeRule -> Bool
$c<= :: TopeRule -> TopeRule -> Bool
< :: TopeRule -> TopeRule -> Bool
$c< :: TopeRule -> TopeRule -> Bool
compare :: TopeRule -> TopeRule -> Ordering
$ccompare :: TopeRule -> TopeRule -> Ordering
C.Ord, Int -> TopeRule -> ShowS
[TopeRule] -> ShowS
TopeRule -> String
(Int -> TopeRule -> ShowS)
-> (TopeRule -> String) -> ([TopeRule] -> ShowS) -> Show TopeRule
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TopeRule] -> ShowS
$cshowList :: [TopeRule] -> ShowS
show :: TopeRule -> String
$cshow :: TopeRule -> String
showsPrec :: Int -> TopeRule -> ShowS
$cshowsPrec :: Int -> TopeRule -> ShowS
C.Show, ReadPrec [TopeRule]
ReadPrec TopeRule
Int -> ReadS TopeRule
ReadS [TopeRule]
(Int -> ReadS TopeRule)
-> ReadS [TopeRule]
-> ReadPrec TopeRule
-> ReadPrec [TopeRule]
-> Read TopeRule
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TopeRule]
$creadListPrec :: ReadPrec [TopeRule]
readPrec :: ReadPrec TopeRule
$creadPrec :: ReadPrec TopeRule
readList :: ReadS [TopeRule]
$creadList :: ReadS [TopeRule]
readsPrec :: Int -> ReadS TopeRule
$creadsPrec :: Int -> ReadS TopeRule
C.Read)

data RuleName = RuleName String
  deriving (RuleName -> RuleName -> Bool
(RuleName -> RuleName -> Bool)
-> (RuleName -> RuleName -> Bool) -> Eq RuleName
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RuleName -> RuleName -> Bool
$c/= :: RuleName -> RuleName -> Bool
== :: RuleName -> RuleName -> Bool
$c== :: RuleName -> RuleName -> Bool
C.Eq, Eq RuleName
Eq RuleName
-> (RuleName -> RuleName -> Ordering)
-> (RuleName -> RuleName -> Bool)
-> (RuleName -> RuleName -> Bool)
-> (RuleName -> RuleName -> Bool)
-> (RuleName -> RuleName -> Bool)
-> (RuleName -> RuleName -> RuleName)
-> (RuleName -> RuleName -> RuleName)
-> Ord RuleName
RuleName -> RuleName -> Bool
RuleName -> RuleName -> Ordering
RuleName -> RuleName -> RuleName
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: RuleName -> RuleName -> RuleName
$cmin :: RuleName -> RuleName -> RuleName
max :: RuleName -> RuleName -> RuleName
$cmax :: RuleName -> RuleName -> RuleName
>= :: RuleName -> RuleName -> Bool
$c>= :: RuleName -> RuleName -> Bool
> :: RuleName -> RuleName -> Bool
$c> :: RuleName -> RuleName -> Bool
<= :: RuleName -> RuleName -> Bool
$c<= :: RuleName -> RuleName -> Bool
< :: RuleName -> RuleName -> Bool
$c< :: RuleName -> RuleName -> Bool
compare :: RuleName -> RuleName -> Ordering
$ccompare :: RuleName -> RuleName -> Ordering
C.Ord, Int -> RuleName -> ShowS
[RuleName] -> ShowS
RuleName -> String
(Int -> RuleName -> ShowS)
-> (RuleName -> String) -> ([RuleName] -> ShowS) -> Show RuleName
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RuleName] -> ShowS
$cshowList :: [RuleName] -> ShowS
show :: RuleName -> String
$cshow :: RuleName -> String
showsPrec :: Int -> RuleName -> ShowS
$cshowsPrec :: Int -> RuleName -> ShowS
C.Show, ReadPrec [RuleName]
ReadPrec RuleName
Int -> ReadS RuleName
ReadS [RuleName]
(Int -> ReadS RuleName)
-> ReadS [RuleName]
-> ReadPrec RuleName
-> ReadPrec [RuleName]
-> Read RuleName
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RuleName]
$creadListPrec :: ReadPrec [RuleName]
readPrec :: ReadPrec RuleName
$creadPrec :: ReadPrec RuleName
readList :: ReadS [RuleName]
$creadList :: ReadS [RuleName]
readsPrec :: Int -> ReadS RuleName
$creadsPrec :: Int -> ReadS RuleName
C.Read)

data Sequent = Sequent CubeContext TopeContext Tope
  deriving (Sequent -> Sequent -> Bool
(Sequent -> Sequent -> Bool)
-> (Sequent -> Sequent -> Bool) -> Eq Sequent
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Sequent -> Sequent -> Bool
$c/= :: Sequent -> Sequent -> Bool
== :: Sequent -> Sequent -> Bool
$c== :: Sequent -> Sequent -> Bool
C.Eq, Eq Sequent
Eq Sequent
-> (Sequent -> Sequent -> Ordering)
-> (Sequent -> Sequent -> Bool)
-> (Sequent -> Sequent -> Bool)
-> (Sequent -> Sequent -> Bool)
-> (Sequent -> Sequent -> Bool)
-> (Sequent -> Sequent -> Sequent)
-> (Sequent -> Sequent -> Sequent)
-> Ord Sequent
Sequent -> Sequent -> Bool
Sequent -> Sequent -> Ordering
Sequent -> Sequent -> Sequent
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Sequent -> Sequent -> Sequent
$cmin :: Sequent -> Sequent -> Sequent
max :: Sequent -> Sequent -> Sequent
$cmax :: Sequent -> Sequent -> Sequent
>= :: Sequent -> Sequent -> Bool
$c>= :: Sequent -> Sequent -> Bool
> :: Sequent -> Sequent -> Bool
$c> :: Sequent -> Sequent -> Bool
<= :: Sequent -> Sequent -> Bool
$c<= :: Sequent -> Sequent -> Bool
< :: Sequent -> Sequent -> Bool
$c< :: Sequent -> Sequent -> Bool
compare :: Sequent -> Sequent -> Ordering
$ccompare :: Sequent -> Sequent -> Ordering
C.Ord, Int -> Sequent -> ShowS
[Sequent] -> ShowS
Sequent -> String
(Int -> Sequent -> ShowS)
-> (Sequent -> String) -> ([Sequent] -> ShowS) -> Show Sequent
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Sequent] -> ShowS
$cshowList :: [Sequent] -> ShowS
show :: Sequent -> String
$cshow :: Sequent -> String
showsPrec :: Int -> Sequent -> ShowS
$cshowsPrec :: Int -> Sequent -> ShowS
C.Show, ReadPrec [Sequent]
ReadPrec Sequent
Int -> ReadS Sequent
ReadS [Sequent]
(Int -> ReadS Sequent)
-> ReadS [Sequent]
-> ReadPrec Sequent
-> ReadPrec [Sequent]
-> Read Sequent
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Sequent]
$creadListPrec :: ReadPrec [Sequent]
readPrec :: ReadPrec Sequent
$creadPrec :: ReadPrec Sequent
readList :: ReadS [Sequent]
$creadList :: ReadS [Sequent]
readsPrec :: Int -> ReadS Sequent
$creadsPrec :: Int -> ReadS Sequent
C.Read)

data CubeContext
    = CubeContextEmpty | CubeContextNonEmpty [PointDecl]
  deriving (CubeContext -> CubeContext -> Bool
(CubeContext -> CubeContext -> Bool)
-> (CubeContext -> CubeContext -> Bool) -> Eq CubeContext
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CubeContext -> CubeContext -> Bool
$c/= :: CubeContext -> CubeContext -> Bool
== :: CubeContext -> CubeContext -> Bool
$c== :: CubeContext -> CubeContext -> Bool
C.Eq, Eq CubeContext
Eq CubeContext
-> (CubeContext -> CubeContext -> Ordering)
-> (CubeContext -> CubeContext -> Bool)
-> (CubeContext -> CubeContext -> Bool)
-> (CubeContext -> CubeContext -> Bool)
-> (CubeContext -> CubeContext -> Bool)
-> (CubeContext -> CubeContext -> CubeContext)
-> (CubeContext -> CubeContext -> CubeContext)
-> Ord CubeContext
CubeContext -> CubeContext -> Bool
CubeContext -> CubeContext -> Ordering
CubeContext -> CubeContext -> CubeContext
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: CubeContext -> CubeContext -> CubeContext
$cmin :: CubeContext -> CubeContext -> CubeContext
max :: CubeContext -> CubeContext -> CubeContext
$cmax :: CubeContext -> CubeContext -> CubeContext
>= :: CubeContext -> CubeContext -> Bool
$c>= :: CubeContext -> CubeContext -> Bool
> :: CubeContext -> CubeContext -> Bool
$c> :: CubeContext -> CubeContext -> Bool
<= :: CubeContext -> CubeContext -> Bool
$c<= :: CubeContext -> CubeContext -> Bool
< :: CubeContext -> CubeContext -> Bool
$c< :: CubeContext -> CubeContext -> Bool
compare :: CubeContext -> CubeContext -> Ordering
$ccompare :: CubeContext -> CubeContext -> Ordering
C.Ord, Int -> CubeContext -> ShowS
[CubeContext] -> ShowS
CubeContext -> String
(Int -> CubeContext -> ShowS)
-> (CubeContext -> String)
-> ([CubeContext] -> ShowS)
-> Show CubeContext
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CubeContext] -> ShowS
$cshowList :: [CubeContext] -> ShowS
show :: CubeContext -> String
$cshow :: CubeContext -> String
showsPrec :: Int -> CubeContext -> ShowS
$cshowsPrec :: Int -> CubeContext -> ShowS
C.Show, ReadPrec [CubeContext]
ReadPrec CubeContext
Int -> ReadS CubeContext
ReadS [CubeContext]
(Int -> ReadS CubeContext)
-> ReadS [CubeContext]
-> ReadPrec CubeContext
-> ReadPrec [CubeContext]
-> Read CubeContext
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CubeContext]
$creadListPrec :: ReadPrec [CubeContext]
readPrec :: ReadPrec CubeContext
$creadPrec :: ReadPrec CubeContext
readList :: ReadS [CubeContext]
$creadList :: ReadS [CubeContext]
readsPrec :: Int -> ReadS CubeContext
$creadsPrec :: Int -> ReadS CubeContext
C.Read)

data PointDecl = PointDecl Var Cube
  deriving (PointDecl -> PointDecl -> Bool
(PointDecl -> PointDecl -> Bool)
-> (PointDecl -> PointDecl -> Bool) -> Eq PointDecl
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PointDecl -> PointDecl -> Bool
$c/= :: PointDecl -> PointDecl -> Bool
== :: PointDecl -> PointDecl -> Bool
$c== :: PointDecl -> PointDecl -> Bool
C.Eq, Eq PointDecl
Eq PointDecl
-> (PointDecl -> PointDecl -> Ordering)
-> (PointDecl -> PointDecl -> Bool)
-> (PointDecl -> PointDecl -> Bool)
-> (PointDecl -> PointDecl -> Bool)
-> (PointDecl -> PointDecl -> Bool)
-> (PointDecl -> PointDecl -> PointDecl)
-> (PointDecl -> PointDecl -> PointDecl)
-> Ord PointDecl
PointDecl -> PointDecl -> Bool
PointDecl -> PointDecl -> Ordering
PointDecl -> PointDecl -> PointDecl
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: PointDecl -> PointDecl -> PointDecl
$cmin :: PointDecl -> PointDecl -> PointDecl
max :: PointDecl -> PointDecl -> PointDecl
$cmax :: PointDecl -> PointDecl -> PointDecl
>= :: PointDecl -> PointDecl -> Bool
$c>= :: PointDecl -> PointDecl -> Bool
> :: PointDecl -> PointDecl -> Bool
$c> :: PointDecl -> PointDecl -> Bool
<= :: PointDecl -> PointDecl -> Bool
$c<= :: PointDecl -> PointDecl -> Bool
< :: PointDecl -> PointDecl -> Bool
$c< :: PointDecl -> PointDecl -> Bool
compare :: PointDecl -> PointDecl -> Ordering
$ccompare :: PointDecl -> PointDecl -> Ordering
C.Ord, Int -> PointDecl -> ShowS
[PointDecl] -> ShowS
PointDecl -> String
(Int -> PointDecl -> ShowS)
-> (PointDecl -> String)
-> ([PointDecl] -> ShowS)
-> Show PointDecl
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PointDecl] -> ShowS
$cshowList :: [PointDecl] -> ShowS
show :: PointDecl -> String
$cshow :: PointDecl -> String
showsPrec :: Int -> PointDecl -> ShowS
$cshowsPrec :: Int -> PointDecl -> ShowS
C.Show, ReadPrec [PointDecl]
ReadPrec PointDecl
Int -> ReadS PointDecl
ReadS [PointDecl]
(Int -> ReadS PointDecl)
-> ReadS [PointDecl]
-> ReadPrec PointDecl
-> ReadPrec [PointDecl]
-> Read PointDecl
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PointDecl]
$creadListPrec :: ReadPrec [PointDecl]
readPrec :: ReadPrec PointDecl
$creadPrec :: ReadPrec PointDecl
readList :: ReadS [PointDecl]
$creadList :: ReadS [PointDecl]
readsPrec :: Int -> ReadS PointDecl
$creadsPrec :: Int -> ReadS PointDecl
C.Read)

data TopeContext = TopeContextEmpty | TopeContextNonEmpty [Tope]
  deriving (TopeContext -> TopeContext -> Bool
(TopeContext -> TopeContext -> Bool)
-> (TopeContext -> TopeContext -> Bool) -> Eq TopeContext
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TopeContext -> TopeContext -> Bool
$c/= :: TopeContext -> TopeContext -> Bool
== :: TopeContext -> TopeContext -> Bool
$c== :: TopeContext -> TopeContext -> Bool
C.Eq, Eq TopeContext
Eq TopeContext
-> (TopeContext -> TopeContext -> Ordering)
-> (TopeContext -> TopeContext -> Bool)
-> (TopeContext -> TopeContext -> Bool)
-> (TopeContext -> TopeContext -> Bool)
-> (TopeContext -> TopeContext -> Bool)
-> (TopeContext -> TopeContext -> TopeContext)
-> (TopeContext -> TopeContext -> TopeContext)
-> Ord TopeContext
TopeContext -> TopeContext -> Bool
TopeContext -> TopeContext -> Ordering
TopeContext -> TopeContext -> TopeContext
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TopeContext -> TopeContext -> TopeContext
$cmin :: TopeContext -> TopeContext -> TopeContext
max :: TopeContext -> TopeContext -> TopeContext
$cmax :: TopeContext -> TopeContext -> TopeContext
>= :: TopeContext -> TopeContext -> Bool
$c>= :: TopeContext -> TopeContext -> Bool
> :: TopeContext -> TopeContext -> Bool
$c> :: TopeContext -> TopeContext -> Bool
<= :: TopeContext -> TopeContext -> Bool
$c<= :: TopeContext -> TopeContext -> Bool
< :: TopeContext -> TopeContext -> Bool
$c< :: TopeContext -> TopeContext -> Bool
compare :: TopeContext -> TopeContext -> Ordering
$ccompare :: TopeContext -> TopeContext -> Ordering
C.Ord, Int -> TopeContext -> ShowS
[TopeContext] -> ShowS
TopeContext -> String
(Int -> TopeContext -> ShowS)
-> (TopeContext -> String)
-> ([TopeContext] -> ShowS)
-> Show TopeContext
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TopeContext] -> ShowS
$cshowList :: [TopeContext] -> ShowS
show :: TopeContext -> String
$cshow :: TopeContext -> String
showsPrec :: Int -> TopeContext -> ShowS
$cshowsPrec :: Int -> TopeContext -> ShowS
C.Show, ReadPrec [TopeContext]
ReadPrec TopeContext
Int -> ReadS TopeContext
ReadS [TopeContext]
(Int -> ReadS TopeContext)
-> ReadS [TopeContext]
-> ReadPrec TopeContext
-> ReadPrec [TopeContext]
-> Read TopeContext
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TopeContext]
$creadListPrec :: ReadPrec [TopeContext]
readPrec :: ReadPrec TopeContext
$creadPrec :: ReadPrec TopeContext
readList :: ReadS [TopeContext]
$creadList :: ReadS [TopeContext]
readsPrec :: Int -> ReadS TopeContext
$creadsPrec :: Int -> ReadS TopeContext
C.Read)

data Tope
    = TopeTop
    | TopeBottom
    | TopeImplies Tope Tope
    | TopeOr Tope Tope
    | TopeAnd Tope Tope
    | TopeEQ Point Point
    | TopeCon Label [Point]
    | TopeVar Var
  deriving (Tope -> Tope -> Bool
(Tope -> Tope -> Bool) -> (Tope -> Tope -> Bool) -> Eq Tope
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Tope -> Tope -> Bool
$c/= :: Tope -> Tope -> Bool
== :: Tope -> Tope -> Bool
$c== :: Tope -> Tope -> Bool
C.Eq, Eq Tope
Eq Tope
-> (Tope -> Tope -> Ordering)
-> (Tope -> Tope -> Bool)
-> (Tope -> Tope -> Bool)
-> (Tope -> Tope -> Bool)
-> (Tope -> Tope -> Bool)
-> (Tope -> Tope -> Tope)
-> (Tope -> Tope -> Tope)
-> Ord Tope
Tope -> Tope -> Bool
Tope -> Tope -> Ordering
Tope -> Tope -> Tope
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Tope -> Tope -> Tope
$cmin :: Tope -> Tope -> Tope
max :: Tope -> Tope -> Tope
$cmax :: Tope -> Tope -> Tope
>= :: Tope -> Tope -> Bool
$c>= :: Tope -> Tope -> Bool
> :: Tope -> Tope -> Bool
$c> :: Tope -> Tope -> Bool
<= :: Tope -> Tope -> Bool
$c<= :: Tope -> Tope -> Bool
< :: Tope -> Tope -> Bool
$c< :: Tope -> Tope -> Bool
compare :: Tope -> Tope -> Ordering
$ccompare :: Tope -> Tope -> Ordering
C.Ord, Int -> Tope -> ShowS
[Tope] -> ShowS
Tope -> String
(Int -> Tope -> ShowS)
-> (Tope -> String) -> ([Tope] -> ShowS) -> Show Tope
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Tope] -> ShowS
$cshowList :: [Tope] -> ShowS
show :: Tope -> String
$cshow :: Tope -> String
showsPrec :: Int -> Tope -> ShowS
$cshowsPrec :: Int -> Tope -> ShowS
C.Show, ReadPrec [Tope]
ReadPrec Tope
Int -> ReadS Tope
ReadS [Tope]
(Int -> ReadS Tope)
-> ReadS [Tope] -> ReadPrec Tope -> ReadPrec [Tope] -> Read Tope
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Tope]
$creadListPrec :: ReadPrec [Tope]
readPrec :: ReadPrec Tope
$creadPrec :: ReadPrec Tope
readList :: ReadS [Tope]
$creadList :: ReadS [Tope]
readsPrec :: Int -> ReadS Tope
$creadsPrec :: Int -> ReadS Tope
C.Read)

data Point
    = PointUnit
    | PointPair Point Point
    | PointFirst Point
    | PointSecond Point
    | PointCon Label [Point]
    | PointVar Var
  deriving (Point -> Point -> Bool
(Point -> Point -> Bool) -> (Point -> Point -> Bool) -> Eq Point
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Point -> Point -> Bool
$c/= :: Point -> Point -> Bool
== :: Point -> Point -> Bool
$c== :: Point -> Point -> Bool
C.Eq, Eq Point
Eq Point
-> (Point -> Point -> Ordering)
-> (Point -> Point -> Bool)
-> (Point -> Point -> Bool)
-> (Point -> Point -> Bool)
-> (Point -> Point -> Bool)
-> (Point -> Point -> Point)
-> (Point -> Point -> Point)
-> Ord Point
Point -> Point -> Bool
Point -> Point -> Ordering
Point -> Point -> Point
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Point -> Point -> Point
$cmin :: Point -> Point -> Point
max :: Point -> Point -> Point
$cmax :: Point -> Point -> Point
>= :: Point -> Point -> Bool
$c>= :: Point -> Point -> Bool
> :: Point -> Point -> Bool
$c> :: Point -> Point -> Bool
<= :: Point -> Point -> Bool
$c<= :: Point -> Point -> Bool
< :: Point -> Point -> Bool
$c< :: Point -> Point -> Bool
compare :: Point -> Point -> Ordering
$ccompare :: Point -> Point -> Ordering
C.Ord, Int -> Point -> ShowS
[Point] -> ShowS
Point -> String
(Int -> Point -> ShowS)
-> (Point -> String) -> ([Point] -> ShowS) -> Show Point
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Point] -> ShowS
$cshowList :: [Point] -> ShowS
show :: Point -> String
$cshow :: Point -> String
showsPrec :: Int -> Point -> ShowS
$cshowsPrec :: Int -> Point -> ShowS
C.Show, ReadPrec [Point]
ReadPrec Point
Int -> ReadS Point
ReadS [Point]
(Int -> ReadS Point)
-> ReadS [Point]
-> ReadPrec Point
-> ReadPrec [Point]
-> Read Point
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Point]
$creadListPrec :: ReadPrec [Point]
readPrec :: ReadPrec Point
$creadPrec :: ReadPrec Point
readList :: ReadS [Point]
$creadList :: ReadS [Point]
readsPrec :: Int -> ReadS Point
$creadsPrec :: Int -> ReadS Point
C.Read)

nullaryPoint :: Label -> Point
nullaryPoint :: Label -> Point
nullaryPoint = \ Label
con -> Label -> [Point] -> Point
PointCon Label
con []

newtype Label = Label String
  deriving (Label -> Label -> Bool
(Label -> Label -> Bool) -> (Label -> Label -> Bool) -> Eq Label
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Label -> Label -> Bool
$c/= :: Label -> Label -> Bool
== :: Label -> Label -> Bool
$c== :: Label -> Label -> Bool
C.Eq, Eq Label
Eq Label
-> (Label -> Label -> Ordering)
-> (Label -> Label -> Bool)
-> (Label -> Label -> Bool)
-> (Label -> Label -> Bool)
-> (Label -> Label -> Bool)
-> (Label -> Label -> Label)
-> (Label -> Label -> Label)
-> Ord Label
Label -> Label -> Bool
Label -> Label -> Ordering
Label -> Label -> Label
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Label -> Label -> Label
$cmin :: Label -> Label -> Label
max :: Label -> Label -> Label
$cmax :: Label -> Label -> Label
>= :: Label -> Label -> Bool
$c>= :: Label -> Label -> Bool
> :: Label -> Label -> Bool
$c> :: Label -> Label -> Bool
<= :: Label -> Label -> Bool
$c<= :: Label -> Label -> Bool
< :: Label -> Label -> Bool
$c< :: Label -> Label -> Bool
compare :: Label -> Label -> Ordering
$ccompare :: Label -> Label -> Ordering
C.Ord, Int -> Label -> ShowS
[Label] -> ShowS
Label -> String
(Int -> Label -> ShowS)
-> (Label -> String) -> ([Label] -> ShowS) -> Show Label
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Label] -> ShowS
$cshowList :: [Label] -> ShowS
show :: Label -> String
$cshow :: Label -> String
showsPrec :: Int -> Label -> ShowS
$cshowsPrec :: Int -> Label -> ShowS
C.Show, ReadPrec [Label]
ReadPrec Label
Int -> ReadS Label
ReadS [Label]
(Int -> ReadS Label)
-> ReadS [Label]
-> ReadPrec Label
-> ReadPrec [Label]
-> Read Label
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Label]
$creadListPrec :: ReadPrec [Label]
readPrec :: ReadPrec Label
$creadPrec :: ReadPrec Label
readList :: ReadS [Label]
$creadList :: ReadS [Label]
readsPrec :: Int -> ReadS Label
$creadsPrec :: Int -> ReadS Label
C.Read, String -> Label
(String -> Label) -> IsString Label
forall a. (String -> a) -> IsString a
fromString :: String -> Label
$cfromString :: String -> Label
Data.String.IsString)

newtype Var = Var String
  deriving (Var -> Var -> Bool
(Var -> Var -> Bool) -> (Var -> Var -> Bool) -> Eq Var
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Var -> Var -> Bool
$c/= :: Var -> Var -> Bool
== :: Var -> Var -> Bool
$c== :: Var -> Var -> Bool
C.Eq, Eq Var
Eq Var
-> (Var -> Var -> Ordering)
-> (Var -> Var -> Bool)
-> (Var -> Var -> Bool)
-> (Var -> Var -> Bool)
-> (Var -> Var -> Bool)
-> (Var -> Var -> Var)
-> (Var -> Var -> Var)
-> Ord Var
Var -> Var -> Bool
Var -> Var -> Ordering
Var -> Var -> Var
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Var -> Var -> Var
$cmin :: Var -> Var -> Var
max :: Var -> Var -> Var
$cmax :: Var -> Var -> Var
>= :: Var -> Var -> Bool
$c>= :: Var -> Var -> Bool
> :: Var -> Var -> Bool
$c> :: Var -> Var -> Bool
<= :: Var -> Var -> Bool
$c<= :: Var -> Var -> Bool
< :: Var -> Var -> Bool
$c< :: Var -> Var -> Bool
compare :: Var -> Var -> Ordering
$ccompare :: Var -> Var -> Ordering
C.Ord, Int -> Var -> ShowS
[Var] -> ShowS
Var -> String
(Int -> Var -> ShowS)
-> (Var -> String) -> ([Var] -> ShowS) -> Show Var
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Var] -> ShowS
$cshowList :: [Var] -> ShowS
show :: Var -> String
$cshow :: Var -> String
showsPrec :: Int -> Var -> ShowS
$cshowsPrec :: Int -> Var -> ShowS
C.Show, ReadPrec [Var]
ReadPrec Var
Int -> ReadS Var
ReadS [Var]
(Int -> ReadS Var)
-> ReadS [Var] -> ReadPrec Var -> ReadPrec [Var] -> Read Var
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Var]
$creadListPrec :: ReadPrec [Var]
readPrec :: ReadPrec Var
$creadPrec :: ReadPrec Var
readList :: ReadS [Var]
$creadList :: ReadS [Var]
readsPrec :: Int -> ReadS Var
$creadsPrec :: Int -> ReadS Var
C.Read, String -> Var
(String -> Var) -> IsString Var
forall a. (String -> a) -> IsString a
fromString :: String -> Var
$cfromString :: String -> Var
Data.String.IsString)

newtype Line = Line String
  deriving (Line -> Line -> Bool
(Line -> Line -> Bool) -> (Line -> Line -> Bool) -> Eq Line
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Line -> Line -> Bool
$c/= :: Line -> Line -> Bool
== :: Line -> Line -> Bool
$c== :: Line -> Line -> Bool
C.Eq, Eq Line
Eq Line
-> (Line -> Line -> Ordering)
-> (Line -> Line -> Bool)
-> (Line -> Line -> Bool)
-> (Line -> Line -> Bool)
-> (Line -> Line -> Bool)
-> (Line -> Line -> Line)
-> (Line -> Line -> Line)
-> Ord Line
Line -> Line -> Bool
Line -> Line -> Ordering
Line -> Line -> Line
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Line -> Line -> Line
$cmin :: Line -> Line -> Line
max :: Line -> Line -> Line
$cmax :: Line -> Line -> Line
>= :: Line -> Line -> Bool
$c>= :: Line -> Line -> Bool
> :: Line -> Line -> Bool
$c> :: Line -> Line -> Bool
<= :: Line -> Line -> Bool
$c<= :: Line -> Line -> Bool
< :: Line -> Line -> Bool
$c< :: Line -> Line -> Bool
compare :: Line -> Line -> Ordering
$ccompare :: Line -> Line -> Ordering
C.Ord, Int -> Line -> ShowS
[Line] -> ShowS
Line -> String
(Int -> Line -> ShowS)
-> (Line -> String) -> ([Line] -> ShowS) -> Show Line
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Line] -> ShowS
$cshowList :: [Line] -> ShowS
show :: Line -> String
$cshow :: Line -> String
showsPrec :: Int -> Line -> ShowS
$cshowsPrec :: Int -> Line -> ShowS
C.Show, ReadPrec [Line]
ReadPrec Line
Int -> ReadS Line
ReadS [Line]
(Int -> ReadS Line)
-> ReadS [Line] -> ReadPrec Line -> ReadPrec [Line] -> Read Line
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Line]
$creadListPrec :: ReadPrec [Line]
readPrec :: ReadPrec Line
$creadPrec :: ReadPrec Line
readList :: ReadS [Line]
$creadList :: ReadS [Line]
readsPrec :: Int -> ReadS Line
$creadsPrec :: Int -> ReadS Line
C.Read, String -> Line
(String -> Line) -> IsString Line
forall a. (String -> a) -> IsString a
fromString :: String -> Line
$cfromString :: String -> Line
Data.String.IsString)