{-# language OverloadedStrings #-} {-# language RecordWildCards #-} module FastDownward.SAS.MutexGroup ( MutexGroup(..), 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.VariableAssignment ( VariableAssignment ) import qualified FastDownward.SAS.VariableAssignment as VariableAssignment newtype MutexGroup = MutexGroup { MutexGroup -> Seq VariableAssignment assignments :: Seq VariableAssignment } deriving ( Int -> MutexGroup -> ShowS [MutexGroup] -> ShowS MutexGroup -> String (Int -> MutexGroup -> ShowS) -> (MutexGroup -> String) -> ([MutexGroup] -> ShowS) -> Show MutexGroup forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [MutexGroup] -> ShowS $cshowList :: [MutexGroup] -> ShowS show :: MutexGroup -> String $cshow :: MutexGroup -> String showsPrec :: Int -> MutexGroup -> ShowS $cshowsPrec :: Int -> MutexGroup -> ShowS Show ) toSAS :: MutexGroup -> Data.Text.Lazy.Builder.Builder toSAS :: MutexGroup -> Builder toSAS MutexGroup{Seq VariableAssignment assignments :: Seq VariableAssignment assignments :: MutexGroup -> Seq VariableAssignment ..} = Builder "begin_mutex_group\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 assignments ) 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 assignments Builder -> Builder -> Builder forall a. Semigroup a => a -> a -> a <> Builder "end_mutex_group"