module Recognize.Data.Definition where
import Domain.Math.Data.Relation
import Ideas.Common.Rewriting
import Ideas.Common.View
type Definition a = (String, a)
definitionView :: WithVars a => View (Relation a) (Definition a)
definitionView = makeView toDefinition fromDefinition
toDefinition :: WithVars a => Relation a -> Maybe (Definition a)
toDefinition r | relationType r == EqualTo
, Just v <- getVariable (leftHandSide r) = Just (v, rightHandSide r)
| relationType r == EqualTo
, Just v <- getVariable (rightHandSide r) = Just (v, leftHandSide r)
| otherwise = Nothing
fromDefinition :: WithVars a => Definition a -> Relation a
fromDefinition (s,e) = variable s .==. e