Skip to content

Commit

Permalink
Rearrange code in Term.hs. #148
Browse files Browse the repository at this point in the history
  • Loading branch information
epost committed Aug 23, 2019
1 parent 93013e4 commit 046f082
Showing 1 changed file with 34 additions and 41 deletions.
75 changes: 34 additions & 41 deletions src/Language/CQL/Term.hs
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,6 @@ import Data.Void
import Language.CQL.Common
import Prelude hiding (EQ)

data RawTerm = RawApp String [RawTerm]
deriving Eq

instance Show RawTerm where
show (RawApp sym az) = show sym ++ "(" ++ (intercalate "," . fmap show $ az) ++ ")"

--------------------------------------------------------------------------------------------
-- Terms

data Term var ty sym en fk att gen sk
-- | Variable.
Expand Down Expand Up @@ -86,48 +78,43 @@ data Head ty sym en fk att gen sk
| HSk sk
deriving (Eq, Ord)

instance TyMap NFData '[var, ty, sym, en, fk, att, gen, sk] =>
NFData (Term var ty sym en fk att gen sk) where
rnf x = case x of
Var v -> rnf v
Sym f a -> let _ = rnf f in rnf a
Fk f a -> let _ = rnf f in rnf a
Att f a -> let _ = rnf f in rnf a
Gen a -> rnf a
Sk a -> rnf a

instance TyMap NFData '[var, ty, sym, en, fk, att, gen, sk] =>
NFData (EQ var ty sym en fk att gen sk) where
rnf (EQ (x, y)) = deepseq x $ rnf y
deriving instance TyMap Eq '[var, sym, fk, att, gen, sk] => Eq (Term var ty sym en fk att gen sk)

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

instance TyMap Show '[var, ty, sym, en, fk, att, gen, sk] =>
Show (Term var ty sym en fk att gen sk)
where
show x = case x of
Var v -> show' v
Gen g -> show' g
Sk s -> show' s
Fk fk a -> show' a ++ "." ++ show' fk
Att att a -> show' a ++ "." ++ show' att
Sym sym [] -> show' sym
Sym sym az -> show' sym ++ "(" ++ (intercalate "," . fmap show' $ az) ++ ")"
where
instance TyMap NFData '[var, ty, sym, en, fk, att, gen, sk] => NFData (Term var ty sym en fk att gen sk) where
rnf x = case x of
Var v -> rnf v
Sym f a -> let _ = rnf f in rnf a
Fk f a -> let _ = rnf f in rnf a
Att f a -> let _ = rnf f in rnf a
Gen a -> rnf a
Sk a -> rnf a

show' :: Show a => a -> String
show' = dropQuotes . show

deriving instance TyMap Ord '[var, ty, sym, en, fk, att, gen, sk] => Ord (Term var ty sym en fk att gen sk)
instance TyMap NFData '[var, ty, sym, en, fk, att, gen, sk] => NFData (EQ var ty sym en fk att gen sk) where
rnf (EQ (x, y)) = deepseq x $ rnf y

instance (Show ty, Show sym, Show en, Show fk, Show att, Show gen, Show sk)
=> Show (Head ty sym en fk att gen sk) where
instance TyMap Show '[var, ty, sym, en, fk, att, gen, sk] => Show (Term var ty sym en fk att gen sk) where
show x = case x of
Var v -> show' v
Gen g -> show' g
Sk s -> show' s
Fk fk a -> show' a ++ "." ++ show' fk
Att att a -> show' a ++ "." ++ show' att
Sym sym [] -> show' sym
Sym sym az -> show' sym ++ "(" ++ (intercalate "," . fmap show' $ az) ++ ")"

instance TyMap Show '[ty, sym, en, fk, att, gen, sk] => Show (Head ty sym en fk att gen sk) where
show x = case x of
HSym sym -> show' sym
HFk fk -> show' fk
HAtt att -> show' att
HGen gen -> show' gen
HSk sk -> show' sk

show' :: Show a => a -> String
show' = dropQuotes . show

-- | Maps functions through a term.
mapTerm
:: (var -> var')
Expand Down Expand Up @@ -391,7 +378,13 @@ deriving instance (Ord a) => Ord (EQF a)

deriving instance (Eq a) => Eq (EQF a)

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

hasTypeType' :: EQ Void ty sym en fk att gen sk -> Bool
hasTypeType' (EQ (lhs, _)) = hasTypeType lhs

--------------------------------------------------------------------------------

data RawTerm = RawApp String [RawTerm]
deriving Eq

instance Show RawTerm where
show (RawApp sym az) = show sym ++ "(" ++ (intercalate "," . fmap show $ az) ++ ")"

0 comments on commit 046f082

Please sign in to comment.