rest-rewrite-0.1: src/Language/REST/Path.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE FlexibleInstances #-}
module Language.REST.Path where
import qualified Data.HashSet as S
import GHC.Generics (Generic)
import Data.Hashable
import Language.REST.Types
data Step rule term a = Step {
term :: PathTerm rule term
, rule :: rule
, ordering :: a
, fromPLE :: Bool
} deriving (Eq, Ord, Generic, Hashable)
data PathTerm rule term = PathTerm
{ pathTerm :: term
-- The orderings FROM pathTerm that were rejected
, rejected :: S.HashSet (term, rule)
} deriving (Eq, Ord, Generic, Hashable)
type Path rule term a = ([Step rule term a], PathTerm rule term)
pathTerms :: Path rule term a -> [term]
pathTerms (xs, x) = map pathTerm $ map term xs ++ [x]
runtimeTerm :: Path rule term a -> term
runtimeTerm (_, pt) = pathTerm pt