{-# LANGUAGE CPP
, DataKinds
, PolyKinds
, GADTs
, TypeOperators
, TypeFamilies
, ExistentialQuantification
#-}
{-# OPTIONS_GHC -Wall -fwarn-tabs #-}
module Language.Hakaru.Syntax.DatumABT
( fromGBranch
, toGBranch
) where
import Language.Hakaru.Syntax.ABT
import Language.Hakaru.Syntax.Datum
fromGBranch
:: (ABT syn abt)
=> GBranch a (abt '[] b)
-> Branch a abt b
fromGBranch :: GBranch a (abt '[] b) -> Branch a abt b
fromGBranch (GBranch Pattern xs a
pat List1 Variable xs
vars abt '[] b
e) =
Pattern xs a -> abt xs b -> Branch a abt b
forall (a :: Hakaru) (abt :: [Hakaru] -> Hakaru -> *) (b :: Hakaru)
(xs :: [Hakaru]).
Pattern xs a -> abt xs b -> Branch a abt b
Branch Pattern xs a
pat (List1 Variable xs -> abt '[] b -> abt xs b
forall k (syn :: ([k] -> k -> *) -> k -> *) (abt :: [k] -> k -> *)
(xs :: [k]) (b :: k).
ABT syn abt =>
List1 Variable xs -> abt '[] b -> abt xs b
binds_ List1 Variable xs
vars abt '[] b
e)
toGBranch
:: (ABT syn abt)
=> Branch a abt b
-> GBranch a (abt '[] b)
toGBranch :: Branch a abt b -> GBranch a (abt '[] b)
toGBranch (Branch Pattern xs a
pat abt xs b
body) =
(List1 Variable xs -> abt '[] b -> GBranch a (abt '[] b))
-> (List1 Variable xs, abt '[] b) -> GBranch a (abt '[] b)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry (Pattern xs a
-> List1 Variable xs -> abt '[] b -> GBranch a (abt '[] b)
forall (a :: Hakaru) r (xs :: [Hakaru]).
Pattern xs a -> List1 Variable xs -> r -> GBranch a r
GBranch Pattern xs a
pat) (abt xs b -> (List1 Variable xs, abt '[] b)
forall k (syn :: ([k] -> k -> *) -> k -> *) (abt :: [k] -> k -> *)
(xs :: [k]) (a :: k).
ABT syn abt =>
abt xs a -> (List1 Variable xs, abt '[] a)
caseBinds abt xs b
body)