AspectAG-0.8.0.0: src/Language/AspectAG/Example3.hs
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE TypeFamilyDependencies #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE IncoherentInstances #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE UnicodeSyntax #-}
{-# LANGUAGE ImpredicativeTypes #-}
{-# LANGUAGE RebindableSyntax #-}
module Language.AspectAG.Example3 where
import Language.AspectAG.Types
import Language.AspectAG
import Language.AspectAG.RecordInstances
import Data.GenRec
import Data.GenRec.RecInstances.Record
import Data.Proxy
import Language.AspectAG.EADT
import Data.HList
import Data.Type.Equality
import Data.Type.Require
import GHC.TypeLits
import Prelude hiding ((>>), (>>=), return)
type TreeGrammar
= 'Grammar '[ '("T", '[ '("Fork", '[ '("l", NonTerminal "T")
, '("r", NonTerminal "T")]),
'("Val", '[ '("val", Terminal Int)])])]
gTree = Label @TreeGrammar
sres = att @"res" @(EADT TreeGrammar "T")
smin = att @"min" @Int
ival = att @"val" @Int