{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeSynonymInstances #-} module Common.GuardedRewriting ( module Generics.Instant.Rewriting, module Generics.Instant ) where import Data.Ratio import Generics.Instant.Rewriting import Generics.Instant instance Extensible Rational where newtype Ext Rational gam = ExtRational Rational toExt = ExtRational instance Matchable Rational where match' (ExtRational r) r' | r == r' = return empty | otherwise = fail "structure mismatch" instance Substitutable Rational where subst' _ (ExtRational r) = return r instance Sampleable Rational where left' = 1 right' = 2 instance Empty Rational where empty' = 1 instance Diffable Rational where diff' (ExtRational r) (ExtRational r') | r == r' = Just (ExtRational r) | otherwise = Nothing instance Validatable Rational type instance Finite Rational = True instance Rewritable Rational instance Representable Rational where type Rep Rational = Rational from = id to = id