{-# language OverloadedStrings #-} {-# language RecordWildCards #-} module FastDownward.SAS.Operator ( Operator(..), toSAS ) where import Data.Sequence ( Seq ) import qualified Data.Sequence as Seq import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Builder import qualified Data.Text.Lazy.Builder.Int import FastDownward.SAS.Effect ( Effect ) import qualified FastDownward.SAS.Effect as Effect import FastDownward.SAS.VariableAssignment ( VariableAssignment ) import qualified FastDownward.SAS.VariableAssignment as VariableAssignment data Operator = Operator { name :: Data.Text.Lazy.Text , prevail :: Seq VariableAssignment , effects :: Seq Effect } deriving ( Show ) toSAS :: Operator -> Data.Text.Lazy.Builder.Builder toSAS Operator{..} = "begin_operator\n" <> Data.Text.Lazy.Builder.fromLazyText name <> "\n" <> Data.Text.Lazy.Builder.Int.decimal ( Seq.length prevail ) <> "\n" <> foldMap ( \x -> VariableAssignment.toSAS x <> "\n" ) prevail <> Data.Text.Lazy.Builder.Int.decimal ( length effects ) <> "\n" <> foldMap ( \x -> Effect.toSAS x <> "\n" ) effects <> "0\n" <> "end_operator"