From 64a2483b12f17e98160a5974a3015a54629de480 Mon Sep 17 00:00:00 2001 From: krangelov Date: Wed, 20 Feb 2019 13:00:51 +0100 Subject: [PATCH] added Data.Data.Data instance for Expr --- src/runtime/haskell-bind/PGF2/Expr.hsc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/runtime/haskell-bind/PGF2/Expr.hsc b/src/runtime/haskell-bind/PGF2/Expr.hsc index 096d15bfa..85e55ab40 100644 --- a/src/runtime/haskell-bind/PGF2/Expr.hsc +++ b/src/runtime/haskell-bind/PGF2/Expr.hsc @@ -6,7 +6,9 @@ import System.IO.Unsafe(unsafePerformIO) import Foreign hiding (unsafePerformIO) import Foreign.C import Data.IORef +import Data.Data import PGF2.FFI +import Data.Maybe(fromJust) -- | An data type that represents -- identifiers for functions and categories in PGF. @@ -42,6 +44,20 @@ instance Eq Expr where e1_touch >> e2_touch 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 mkAbs :: BindType -> CId -> Expr -> Expr mkAbs bind_type var (Expr body bodyTouch) =