formura-1.0: src/Formura/Interpreter/Value.hs
{-|
Module : Formura.Interpreter.Value
Description : Haskell interpreter's value semantics
Copyright : (c) Takayuki Muranushi, 2015
License : MIT
Maintainer : muranushi@gmail.com
Stability : experimental
Grid object with rational offset, to interpret Formura semantics in Haskell.
-}
{-# LANGUAGE DataKinds, DeriveFunctor, DeriveFoldable,
DeriveTraversable, PatternSynonyms, TemplateHaskell, ViewPatterns #-}
module Formura.Interpreter.Value where
import Control.Lens
import qualified Data.Vector as V
import Formura.Language.Combinator
import Formura.Syntax
newtype ElemValueF x = ElemValueF Double
deriving (Eq, Ord, Show, Functor, Foldable, Traversable)
pattern ElemValue x <- ((^? match) -> Just (ElemValueF x)) where ElemValue x = match # ElemValueF x
data FunValueF x = FunValueF LExpr RExpr
deriving (Eq, Ord, Show, Functor, Foldable, Traversable)
pattern FunValue l r <- ((^? match) -> Just (FunValueF l r)) where FunValue l r = match # FunValueF l r
data VectorValueF x =
VectorValueF
{ _vectorContent :: V.Vector x
}
deriving (Eq, Ord, Show, Functor, Foldable, Traversable)
data GridValueF x =
GridValueF
{ _gridOffset :: [Rational]
, _gridContent :: V.Vector x
}
deriving (Eq, Ord, Show, Functor, Foldable, Traversable)
makeLenses ''GridValueF
type ValueExpr = Lang '[ GridValueF, TupleF, VectorValueF, FunValueF, ElemValueF ]
type TypedValue = (ValueExpr, TypeExpr)