{-# 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
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"
  forall a. Semigroup a => a -> a -> a
<> forall a. Integral a => a -> Builder
Data.Text.Lazy.Builder.Int.decimal ( forall a. Seq a -> Int
Seq.length Seq VariableAssignment
assignments ) forall a. Semigroup a => a -> a -> a
<> Builder
"\n"
  forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap ( \VariableAssignment
x -> VariableAssignment -> Builder
VariableAssignment.toSAS VariableAssignment
x forall a. Semigroup a => a -> a -> a
<> Builder
"\n" ) Seq VariableAssignment
assignments
  forall a. Semigroup a => a -> a -> a
<> Builder
"end_mutex_group"