packages feed

compdata-automata-0.9: benchmark/DataTypes/Comp.hs

{-# LANGUAGE DeriveFunctor, DeriveTraversable, DeriveFoldable, TemplateHaskell, FlexibleContexts #-}

module DataTypes.Comp where

import Data.Comp.Derive

type Var = String

data Arith a = Add a a | Val Int 
               deriving (Show, Functor, Foldable, Traversable)

data Let a = Let Var a a | Var Var
                           deriving (Show, Functor, Foldable, Traversable)
data Exc a = Throw | Catch a a
             deriving (Show, Functor, Foldable, Traversable)

data Code a = PUSH Int a 
             | ADD a
             | THROW
             | MARK a a
             | UNMARK a
             | NIL



$(derive
  [makeEqF, makeNFDataF, makeArbitraryF, smartConstructors]
  [''Arith, ''Let, ''Exc])