{-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} -- | Expression for 'Eq'. module Language.LOL.Symantic.Expr.Eq where import Language.LOL.Symantic.Repr.Dup import Language.LOL.Symantic.Trans.Common -- * Class 'Sym_Eq' class Sym_Eq repr where eq :: Eq a => repr a -> repr a -> repr Bool default eq :: (Trans t repr, Eq a) => t repr a -> t repr a -> t repr Bool eq = trans_map2 eq instance (Sym_Eq r1, Sym_Eq r2) => Sym_Eq (Dup r1 r2) where eq (x1 `Dup` x2) (y1 `Dup` y2) = eq x1 y1 `Dup` eq x2 y2