{-# language OverloadedStrings #-} {-# language RecordWildCards #-} module FastDownward.SAS.Axiom ( Axiom(..), toSAS ) where import Data.Sequence ( Seq ) import qualified Data.Sequence as Seq import qualified Data.Text.Lazy.Builder import qualified Data.Text.Lazy.Builder.Int import FastDownward.SAS.DomainIndex ( DomainIndex ) import qualified FastDownward.SAS.DomainIndex as DomainIndex import FastDownward.SAS.VariableAssignment ( VariableAssignment ) import qualified FastDownward.SAS.VariableAssignment as VariableAssignment import FastDownward.SAS.VariableIndex ( VariableIndex ) import qualified FastDownward.SAS.VariableIndex as VariableIndex data Axiom = Axiom { Axiom -> VariableIndex variable :: VariableIndex , Axiom -> Seq VariableAssignment conditions :: Seq VariableAssignment , Axiom -> DomainIndex pre :: DomainIndex , Axiom -> DomainIndex post :: DomainIndex } deriving ( Int -> Axiom -> ShowS [Axiom] -> ShowS Axiom -> String (Int -> Axiom -> ShowS) -> (Axiom -> String) -> ([Axiom] -> ShowS) -> Show Axiom forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Axiom] -> ShowS $cshowList :: [Axiom] -> ShowS show :: Axiom -> String $cshow :: Axiom -> String showsPrec :: Int -> Axiom -> ShowS $cshowsPrec :: Int -> Axiom -> ShowS Show ) toSAS :: Axiom -> Data.Text.Lazy.Builder.Builder toSAS :: Axiom -> Builder toSAS Axiom{Seq VariableAssignment DomainIndex VariableIndex post :: DomainIndex pre :: DomainIndex conditions :: Seq VariableAssignment variable :: VariableIndex post :: Axiom -> DomainIndex pre :: Axiom -> DomainIndex conditions :: Axiom -> Seq VariableAssignment variable :: Axiom -> VariableIndex ..} = Builder "begin_rule\n" Builder -> Builder -> Builder forall a. Semigroup a => a -> a -> a <> Int -> Builder forall a. Integral a => a -> Builder Data.Text.Lazy.Builder.Int.decimal ( Seq VariableAssignment -> Int forall a. Seq a -> Int Seq.length Seq VariableAssignment conditions ) Builder -> Builder -> Builder forall a. Semigroup a => a -> a -> a <> Builder "\n" Builder -> Builder -> Builder forall a. Semigroup a => a -> a -> a <> (VariableAssignment -> Builder) -> Seq VariableAssignment -> Builder forall (t :: * -> *) m a. (Foldable t, Monoid m) => (a -> m) -> t a -> m foldMap ( \VariableAssignment x -> VariableAssignment -> Builder VariableAssignment.toSAS VariableAssignment x Builder -> Builder -> Builder forall a. Semigroup a => a -> a -> a <> Builder "\n" ) Seq VariableAssignment conditions Builder -> Builder -> Builder forall a. Semigroup a => a -> a -> a <> VariableIndex -> Builder VariableIndex.toSAS VariableIndex variable Builder -> Builder -> Builder forall a. Semigroup a => a -> a -> a <> Builder " " Builder -> Builder -> Builder forall a. Semigroup a => a -> a -> a <> DomainIndex -> Builder DomainIndex.toSAS DomainIndex pre Builder -> Builder -> Builder forall a. Semigroup a => a -> a -> a <> Builder " " Builder -> Builder -> Builder forall a. Semigroup a => a -> a -> a <> DomainIndex -> Builder DomainIndex.toSAS DomainIndex post Builder -> Builder -> Builder forall a. Semigroup a => a -> a -> a <> Builder "\n" Builder -> Builder -> Builder forall a. Semigroup a => a -> a -> a <> Builder "end_rule"