packages feed

ecta-1.0.0.0: src/Application/TermSearch/Type.hs

module Application.TermSearch.Type
  ( TypeSkeleton(..)
  , Benchmark(..)
  , Argument
  , Mode(..)
  , AblationType(..)
  ) where

import           Data.Data                      ( Data )
import           Data.Hashable                  ( Hashable )
import           Data.Text                      ( Text )
import           GHC.Generics                   ( Generic )

import           Data.ECTA
import           Data.ECTA.Term

data TypeSkeleton
  = TVar Text
  | TFun TypeSkeleton TypeSkeleton
  | TCons Text [TypeSkeleton]
  deriving (Eq, Ord, Show, Read, Data, Generic)

instance Hashable TypeSkeleton

data Benchmark = Benchmark { bmName      :: Text
                           , bmSize      :: Int
                           , bmSolution  :: Term
                           , bmArguments :: [(Text, TypeSkeleton)]
                           , bmGoalType  :: TypeSkeleton
                           }
  deriving (Eq, Ord, Show, Read)

type Argument = (Symbol, Node)

data Mode
  = Normal
  | HKTV
  | Lambda
  deriving (Eq, Ord, Show, Data, Generic)

data AblationType
  = Default
  | NoReduction
  | NoEnumeration
  | NoOptimize
  deriving (Eq, Ord, Show, Data, Generic)