mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-30 13:18:56 -06:00
added Data.Data.Data instance for Expr
This commit is contained in:
@@ -6,7 +6,9 @@ import System.IO.Unsafe(unsafePerformIO)
|
|||||||
import Foreign hiding (unsafePerformIO)
|
import Foreign hiding (unsafePerformIO)
|
||||||
import Foreign.C
|
import Foreign.C
|
||||||
import Data.IORef
|
import Data.IORef
|
||||||
|
import Data.Data
|
||||||
import PGF2.FFI
|
import PGF2.FFI
|
||||||
|
import Data.Maybe(fromJust)
|
||||||
|
|
||||||
-- | An data type that represents
|
-- | An data type that represents
|
||||||
-- identifiers for functions and categories in PGF.
|
-- identifiers for functions and categories in PGF.
|
||||||
@@ -42,6 +44,20 @@ instance Eq Expr where
|
|||||||
e1_touch >> e2_touch
|
e1_touch >> e2_touch
|
||||||
return (res /= 0)
|
return (res /= 0)
|
||||||
|
|
||||||
|
instance Data Expr where
|
||||||
|
gfoldl f z e = z (fromJust . readExpr) `f` (showExpr [] e)
|
||||||
|
toConstr _ = readExprConstr
|
||||||
|
gunfold k z c = case constrIndex c of
|
||||||
|
1 -> k (z (fromJust . readExpr))
|
||||||
|
_ -> error "gunfold"
|
||||||
|
dataTypeOf _ = exprDataType
|
||||||
|
|
||||||
|
readExprConstr :: Constr
|
||||||
|
readExprConstr = mkConstr exprDataType "(fromJust . readExpr)" [] Prefix
|
||||||
|
|
||||||
|
exprDataType :: DataType
|
||||||
|
exprDataType = mkDataType "PGF2.Expr" [readExprConstr]
|
||||||
|
|
||||||
-- | Constructs an expression by lambda abstraction
|
-- | Constructs an expression by lambda abstraction
|
||||||
mkAbs :: BindType -> CId -> Expr -> Expr
|
mkAbs :: BindType -> CId -> Expr -> Expr
|
||||||
mkAbs bind_type var (Expr body bodyTouch) =
|
mkAbs bind_type var (Expr body bodyTouch) =
|
||||||
|
|||||||
Reference in New Issue
Block a user