packages feed

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