{-# 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 { variable :: VariableIndex , conditions :: Seq VariableAssignment , pre :: DomainIndex , post :: DomainIndex } deriving ( Show ) toSAS :: Axiom -> Data.Text.Lazy.Builder.Builder toSAS Axiom{..} = "begin_rule\n" <> Data.Text.Lazy.Builder.Int.decimal ( Seq.length conditions ) <> "\n" <> foldMap ( \x -> VariableAssignment.toSAS x <> "\n" ) conditions <> VariableIndex.toSAS variable <> " " <> DomainIndex.toSAS pre <> " " <> DomainIndex.toSAS post <> "\n" <> "end_rule"