packages feed

guarded-rewriting-0.1: performance/Common/GuardedRewriting.hs

{-# 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