packages feed

signals-0.0.0.1: Interpretation.hs

{-# LANGUAGE ConstraintKinds        #-}
{-# LANGUAGE TypeFamilies           #-}
{-# LANGUAGE MultiParamTypeClasses  #-}

module Interpretation where

import Data.Constraint

import Backend.C.Monad   (C)
import Language.C.Syntax (Exp)

--------------------------------------------------------------------------------
-- * Evaluation
--------------------------------------------------------------------------------

-- | General interface for evaluating expressions
class EvalExp exp
  where
    -- | Predicate for literals
    type LitPred exp :: * -> Constraint

    -- | Literal expressions
    litExp  :: LitPred exp a => a -> exp a

    -- | Evaluation of (closed) expressions
    evalExp :: exp a -> a

-------------------------------------------------------------------------------
-- * Compilation
-------------------------------------------------------------------------------

-- | General interface for compiling expressions
class CompExp exp
  where
    -- | Predicate for variables
    type VarPred exp :: * -> Constraint

    -- | Variable expressions
    varExp  :: VarPred exp a => String -> exp a

    -- | Compilation of expressions
    compExp :: exp a -> C Exp

--------------------------------------------------------------------------------
-- **

-- | General interface for compiling constructs
class CompCMD cmd
  where
    -- | Compilation of constructs
    compCMD :: cmd a -> C a