{-# 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 { assignments :: Seq VariableAssignment }
  deriving
    ( Show )


toSAS :: MutexGroup -> Data.Text.Lazy.Builder.Builder
toSAS MutexGroup{..} =
     "begin_mutex_group\n"
  <> Data.Text.Lazy.Builder.Int.decimal ( Seq.length assignments ) <> "\n"
  <> foldMap ( \x -> VariableAssignment.toSAS x <> "\n" ) assignments
  <> "end_mutex_group"