-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Generate Haskell code from a type. Library extracted from djinn package.
--   
--   Djinn uses an theorem prover for intuitionistic propositional logic to
--   generate a Haskell expression when given a type. This is a library
--   extracted from Djinn sources.
@package djinn-lib
@version 0.0.1.2

module Djinn.LJTFormula
newtype Symbol
Symbol :: String -> Symbol
data Formula
Conj :: [Formula] -> Formula
Disj :: [(ConsDesc, Formula)] -> Formula
(:->) :: Formula -> Formula -> Formula
PVar :: Symbol -> Formula
(<->) :: Formula -> Formula -> Formula
(&) :: Formula -> Formula -> Formula
(|:) :: Formula -> Formula -> Formula
fnot :: Formula -> Formula
false :: Formula
true :: Formula
data ConsDesc
ConsDesc :: String -> Int -> ConsDesc
data Term
Var :: Symbol -> Term
Lam :: Symbol -> Term -> Term
Apply :: Term -> Term -> Term
Ctuple :: Int -> Term
Csplit :: Int -> Term
Cinj :: ConsDesc -> Int -> Term
Ccases :: [ConsDesc] -> Term
Xsel :: Int -> Int -> Term -> Term
applys :: Term -> [Term] -> Term
freeVars :: Term -> [Symbol]
instance GHC.Classes.Ord Djinn.LJTFormula.Term
instance GHC.Classes.Eq Djinn.LJTFormula.Term
instance GHC.Classes.Ord Djinn.LJTFormula.Formula
instance GHC.Classes.Eq Djinn.LJTFormula.Formula
instance GHC.Show.Show Djinn.LJTFormula.ConsDesc
instance GHC.Classes.Ord Djinn.LJTFormula.ConsDesc
instance GHC.Classes.Eq Djinn.LJTFormula.ConsDesc
instance GHC.Classes.Ord Djinn.LJTFormula.Symbol
instance GHC.Classes.Eq Djinn.LJTFormula.Symbol
instance GHC.Show.Show Djinn.LJTFormula.Symbol
instance GHC.Show.Show Djinn.LJTFormula.Formula
instance GHC.Show.Show Djinn.LJTFormula.Term

module Djinn.LJT
provable :: Formula -> Bool
prove :: MoreSolutions -> [(Symbol, Formula)] -> Formula -> [Proof]
type Proof = Term
type MoreSolutions = Bool
instance GHC.Show.Show Djinn.LJT.AtomImp
instance GHC.Show.Show Djinn.LJT.Antecedent
instance GHC.Classes.Eq Djinn.LJT.NestImp
instance GHC.Classes.Eq Djinn.LJT.AtomF
instance GHC.Base.Applicative Djinn.LJT.P
instance GHC.Base.Monad Djinn.LJT.P
instance GHC.Base.Functor Djinn.LJT.P
instance GHC.Base.Alternative Djinn.LJT.P
instance GHC.Base.MonadPlus Djinn.LJT.P
instance GHC.Show.Show Djinn.LJT.AtomF
instance GHC.Show.Show Djinn.LJT.NestImp

module Djinn.HTypes
data HKind
KStar :: HKind
KArrow :: HKind -> HKind -> HKind
KVar :: Int -> HKind
data HType
HTApp :: HType -> HType -> HType
HTVar :: HSymbol -> HType
HTCon :: HSymbol -> HType
HTTuple :: [HType] -> HType
HTArrow :: HType -> HType -> HType
HTUnion :: [(HSymbol, [HType])] -> HType
HTAbstract :: HSymbol -> HKind -> HType
type HSymbol = String
hTypeToFormula :: [(HSymbol, ([HSymbol], HType, a))] -> HType -> Formula
pHSymbol :: Bool -> ReadP HSymbol
pHType :: ReadP HType
pHDataType :: ReadP HType
pHTAtom :: ReadP HType
pHKind :: ReadP HKind
prHSymbolOp :: HSymbol -> String
htNot :: HSymbol -> HType
isHTUnion :: HType -> Bool
getHTVars :: HType -> [HSymbol]
substHT :: [(HSymbol, HType)] -> HType -> HType
data HClause
HClause :: HSymbol -> [HPat] -> HExpr -> HClause
data HPat
HPVar :: HSymbol -> HPat
HPCon :: HSymbol -> HPat
HPTuple :: [HPat] -> HPat
HPAt :: HSymbol -> HPat -> HPat
HPApply :: HPat -> HPat -> HPat
data HExpr
HELam :: [HPat] -> HExpr -> HExpr
HEApply :: HExpr -> HExpr -> HExpr
HECon :: HSymbol -> HExpr
HEVar :: HSymbol -> HExpr
HETuple :: [HExpr] -> HExpr
HECase :: HExpr -> [(HPat, HExpr)] -> HExpr
hPrClause :: HClause -> String
hPrExpr :: HExpr -> String
termToHExpr :: Term -> HExpr
termToHClause :: HSymbol -> Term -> HClause
getBinderVars :: HClause -> [HSymbol]
instance GHC.Classes.Eq Djinn.HTypes.HClause
instance GHC.Show.Show Djinn.HTypes.HClause
instance GHC.Classes.Eq Djinn.HTypes.HExpr
instance GHC.Show.Show Djinn.HTypes.HExpr
instance GHC.Classes.Eq Djinn.HTypes.HPat
instance GHC.Show.Show Djinn.HTypes.HPat
instance GHC.Classes.Eq Djinn.HTypes.HType
instance GHC.Show.Show Djinn.HTypes.HKind
instance GHC.Classes.Eq Djinn.HTypes.HKind
instance GHC.Show.Show Djinn.HTypes.HType
instance GHC.Read.Read Djinn.HTypes.HType

module Djinn.HCheck
htCheckEnv :: [(HSymbol, ([HSymbol], HType, a))] -> Either String [(HSymbol, ([HSymbol], HType, HKind))]
htCheckType :: [(HSymbol, ([HSymbol], HType, HKind))] -> HType -> Either String ()
