module Language.Haskell.ReverseAD.TH.Source where

import Language.Haskell.TH (Name, Lit, Pat, Type)


data Exp
  = EVar Name
  | ECon Name
  | ELit Lit
  | EApp Exp Exp
  | ELam Pat Exp
  | ETup [Exp]
  | ECond Exp Exp Exp
  | ELet [DecGroup] Exp
  | ECase Exp [(Pat, Exp)]
  | EList [Exp]
  | ESig Exp Type
  deriving (Int -> Exp -> ShowS
[Exp] -> ShowS
Exp -> String
(Int -> Exp -> ShowS)
-> (Exp -> String) -> ([Exp] -> ShowS) -> Show Exp
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Exp -> ShowS
showsPrec :: Int -> Exp -> ShowS
$cshow :: Exp -> String
show :: Exp -> String
$cshowList :: [Exp] -> ShowS
showList :: [Exp] -> ShowS
Show)
infixl `EApp`

data DecGroup
  = DecVar Name (Maybe Type) Exp  -- ^ a single variable binding
  | DecMutGroup [(Name, Maybe Type, Pat, Exp)]  -- ^ a mutually-recursive group of function bindings
  deriving (Int -> DecGroup -> ShowS
[DecGroup] -> ShowS
DecGroup -> String
(Int -> DecGroup -> ShowS)
-> (DecGroup -> String) -> ([DecGroup] -> ShowS) -> Show DecGroup
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DecGroup -> ShowS
showsPrec :: Int -> DecGroup -> ShowS
$cshow :: DecGroup -> String
show :: DecGroup -> String
$cshowList :: [DecGroup] -> ShowS
showList :: [DecGroup] -> ShowS
Show)