Skip to content

Commit e58ca07

Browse files
epostmarcosh
authored andcommitted
Rearrange code in Term.hs. #148
1 parent fc49f42 commit e58ca07

File tree

1 file changed

+65
-67
lines changed

1 file changed

+65
-67
lines changed

src/Language/CQL/Term.hs

+65-67
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,6 @@ import Data.Void
4949
import Language.CQL.Common
5050
import Prelude hiding (EQ)
5151

52-
data RawTerm = RawApp String [RawTerm]
53-
deriving Eq
54-
55-
instance Show RawTerm where
56-
show (RawApp sym az) = show sym ++ "(" ++ (intercalate "," . fmap show $ az) ++ ")"
57-
58-
--------------------------------------------------------------------------------------------
59-
-- Terms
6052

6153
data Term var ty sym en fk att gen sk
6254
-- | Variable.
@@ -86,48 +78,40 @@ data Head ty sym en fk att gen sk
8678
| HSk sk
8779
deriving (Eq, Ord)
8880

89-
instance TyMap NFData '[var, ty, sym, en, fk, att, gen, sk] =>
90-
NFData (Term var ty sym en fk att gen sk) where
91-
rnf x = case x of
92-
Var v -> rnf v
93-
Sym f a -> let _ = rnf f in rnf a
94-
Fk f a -> let _ = rnf f in rnf a
95-
Att f a -> let _ = rnf f in rnf a
96-
Gen a -> rnf a
97-
Sk a -> rnf a
98-
99-
instance TyMap NFData '[var, ty, sym, en, fk, att, gen, sk] =>
100-
NFData (EQ var ty sym en fk att gen sk) where
101-
rnf (EQ (x, y)) = deepseq x $ rnf y
102-
103-
104-
instance TyMap Show '[var, ty, sym, en, fk, att, gen, sk] =>
105-
Show (Term var ty sym en fk att gen sk)
106-
where
107-
show x = case x of
108-
Var v -> show' v
109-
Gen g -> show' g
110-
Sk s -> show' s
111-
Fk fk a -> show' a ++ "." ++ show' fk
112-
Att att a -> show' a ++ "." ++ show' att
113-
Sym sym [] -> show' sym
114-
Sym sym az -> show' sym ++ "(" ++ (intercalate "," . fmap show' $ az) ++ ")"
115-
where
116-
117-
show' :: Show a => a -> String
118-
show' = dropQuotes . show
81+
deriving instance TyMap Eq '[var, sym, fk, att, gen, sk] => Eq (Term var ty sym en fk att gen sk)
11982

12083
deriving instance TyMap Ord '[var, ty, sym, en, fk, att, gen, sk] => Ord (Term var ty sym en fk att gen sk)
12184

122-
instance (Show ty, Show sym, Show en, Show fk, Show att, Show gen, Show sk)
123-
=> Show (Head ty sym en fk att gen sk) where
85+
instance TyMap NFData '[var, ty, sym, en, fk, att, gen, sk] => NFData (Term var ty sym en fk att gen sk) where
86+
rnf x = case x of
87+
Var v -> rnf v
88+
Sym f a -> let _ = rnf f in rnf a
89+
Fk f a -> let _ = rnf f in rnf a
90+
Att f a -> let _ = rnf f in rnf a
91+
Gen a -> rnf a
92+
Sk a -> rnf a
93+
94+
instance TyMap Show '[var, ty, sym, en, fk, att, gen, sk] => Show (Term var ty sym en fk att gen sk) where
95+
show x = case x of
96+
Var v -> show' v
97+
Gen g -> show' g
98+
Sk s -> show' s
99+
Fk fk a -> show' a ++ "." ++ show' fk
100+
Att att a -> show' a ++ "." ++ show' att
101+
Sym sym [] -> show' sym
102+
Sym sym az -> show' sym ++ "(" ++ (intercalate "," . fmap show' $ az) ++ ")"
103+
104+
instance TyMap Show '[ty, sym, en, fk, att, gen, sk] => Show (Head ty sym en fk att gen sk) where
124105
show x = case x of
125106
HSym sym -> show' sym
126107
HFk fk -> show' fk
127108
HAtt att -> show' att
128109
HGen gen -> show' gen
129110
HSk sk -> show' sk
130111

112+
show' :: Show a => a -> String
113+
show' = dropQuotes . show
114+
131115
-- | Maps functions through a term.
132116
mapTerm
133117
:: (var -> var')
@@ -208,7 +192,7 @@ hasTypeType'' t = case t of
208192
Fk _ _ -> False
209193

210194
----------------------------------------------------------------------------------------------------------
211-
-- Substitution and simplification of theories
195+
-- Substitution and simplification on terms
212196

213197
-- | Experimental
214198
subst2
@@ -268,6 +252,41 @@ occurs h x = case x of
268252
Att h' a -> h == HAtt h' || occurs h a
269253
Sym h' as -> h == HSym h' || any (occurs h) as
270254

255+
256+
--------------------------------------------------------------------------------------------------------------------
257+
-- Equality, especially on Terms
258+
259+
-- | A value of this type means the lhs and rhs are equal.
260+
-- One reason for its existence is to allow pretty-printing.
261+
type EQ var ty sym en fk att gen sk = EQF (Term var ty sym en fk att gen sk)
262+
263+
newtype EQF a = EQ (a, a)
264+
265+
instance Functor EQF where
266+
fmap f (EQ (l, r)) = EQ (f l, f r)
267+
268+
instance (Show a) => Show (EQF a) where
269+
show (EQ (lhs, rhs)) = show lhs ++ " = " ++ show rhs
270+
271+
deriving instance (Ord a) => Ord (EQF a)
272+
273+
deriving instance (Eq a) => Eq (EQF a)
274+
275+
instance TyMap NFData '[var, ty, sym, en, fk, att, gen, sk] => NFData (EQ var ty sym en fk att gen sk) where
276+
rnf (EQ (x, y)) = deepseq x $ rnf y
277+
278+
hasTypeType' :: EQ Void ty sym en fk att gen sk -> Bool
279+
hasTypeType' (EQ (lhs, _)) = hasTypeType lhs
280+
281+
282+
--------------------------------------------------------------------------------------------------------------------
283+
-- Theories
284+
285+
type Theory var ty sym en fk att gen sk = Set (Ctx var (ty+en), EQ var ty sym en fk att gen sk)
286+
287+
-- TODO wrap Map class to throw an error (or do something less ad hoc) if a key is ever inserted twice
288+
type Ctx k v = Map k v
289+
271290
-- | If there is one, finds an equation of the form @empty |- gen/sk = term@,
272291
-- where @gen@ does not occur in @term@.
273292
findSimplifiableEq
@@ -367,31 +386,10 @@ instance Up x (x + y) where
367386
instance Up y (x + y) where
368387
upgr = Right
369388

370-
--------------------------------------------------------------------------------------------------------------------
371-
-- Theories
372-
373-
type Theory var ty sym en fk att gen sk = Set (Ctx var (ty+en), EQ var ty sym en fk att gen sk)
374-
375-
-- TODO wrap Map class to throw an error (or do something less ad hoc) if a key is ever put twice
376-
type Ctx k v = Map k v
377-
378-
-- | A value of this type means the lhs and rhs are equal.
379-
-- One reason for its existence is to allow pretty-printing.
380-
type EQ var ty sym en fk att gen sk = EQF (Term var ty sym en fk att gen sk)
389+
--------------------------------------------------------------------------------
381390

382-
newtype EQF a = EQ (a, a)
383-
384-
instance Functor EQF where
385-
fmap f (EQ (l, r)) = EQ (f l, f r)
386-
387-
instance (Show a) => Show (EQF a) where
388-
show (EQ (lhs, rhs)) = show lhs ++ " = " ++ show rhs
389-
390-
deriving instance (Ord a) => Ord (EQF a)
391-
392-
deriving instance (Eq a) => Eq (EQF a)
393-
394-
deriving instance TyMap Eq '[var, sym, fk, att, gen, sk] => Eq (Term var ty sym en fk att gen sk)
391+
data RawTerm = RawApp String [RawTerm]
392+
deriving Eq
395393

396-
hasTypeType' :: EQ Void ty sym en fk att gen sk -> Bool
397-
hasTypeType' (EQ (lhs, _)) = hasTypeType lhs
394+
instance Show RawTerm where
395+
show (RawApp sym az) = show sym ++ "(" ++ (intercalate "," . fmap show $ az) ++ ")"

0 commit comments

Comments
 (0)