{-# language OverloadedStrings #-}
{-# language RecordWildCards #-}

module FastDownward.SAS.Effect ( Effect(..), toSAS ) where

import qualified Data.Text.Lazy.Builder
import FastDownward.SAS.DomainIndex ( DomainIndex )
import qualified FastDownward.SAS.DomainIndex as DomainIndex
import FastDownward.SAS.VariableIndex ( VariableIndex )
import qualified FastDownward.SAS.VariableIndex as VariableIndex


data Effect =
  Effect
    { Effect -> VariableIndex
variable :: VariableIndex
    , Effect -> Maybe DomainIndex
pre :: Maybe DomainIndex
    , Effect -> DomainIndex
post :: DomainIndex
    }
  deriving
    ( Effect -> Effect -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Effect -> Effect -> Bool
$c/= :: Effect -> Effect -> Bool
== :: Effect -> Effect -> Bool
$c== :: Effect -> Effect -> Bool
Eq, Eq Effect
Effect -> Effect -> Bool
Effect -> Effect -> Ordering
Effect -> Effect -> Effect
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Effect -> Effect -> Effect
$cmin :: Effect -> Effect -> Effect
max :: Effect -> Effect -> Effect
$cmax :: Effect -> Effect -> Effect
>= :: Effect -> Effect -> Bool
$c>= :: Effect -> Effect -> Bool
> :: Effect -> Effect -> Bool
$c> :: Effect -> Effect -> Bool
<= :: Effect -> Effect -> Bool
$c<= :: Effect -> Effect -> Bool
< :: Effect -> Effect -> Bool
$c< :: Effect -> Effect -> Bool
compare :: Effect -> Effect -> Ordering
$ccompare :: Effect -> Effect -> Ordering
Ord, Int -> Effect -> ShowS
[Effect] -> ShowS
Effect -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Effect] -> ShowS
$cshowList :: [Effect] -> ShowS
show :: Effect -> String
$cshow :: Effect -> String
showsPrec :: Int -> Effect -> ShowS
$cshowsPrec :: Int -> Effect -> ShowS
Show )


toSAS :: Effect -> Data.Text.Lazy.Builder.Builder
toSAS :: Effect -> Builder
toSAS Effect{Maybe DomainIndex
DomainIndex
VariableIndex
post :: DomainIndex
pre :: Maybe DomainIndex
variable :: VariableIndex
post :: Effect -> DomainIndex
pre :: Effect -> Maybe DomainIndex
variable :: Effect -> VariableIndex
..} =
     Builder
"0"
  forall a. Semigroup a => a -> a -> a
<> Builder
" "
  forall a. Semigroup a => a -> a -> a
<> VariableIndex -> Builder
VariableIndex.toSAS VariableIndex
variable forall a. Semigroup a => a -> a -> a
<> Builder
" "
  forall a. Semigroup a => a -> a -> a
<> case Maybe DomainIndex
pre of
      Maybe DomainIndex
Nothing ->
        Builder
"-1"

      Just DomainIndex
x ->
        DomainIndex -> Builder
DomainIndex.toSAS DomainIndex
x
  forall a. Semigroup a => a -> a -> a
<> Builder
" "
  forall a. Semigroup a => a -> a -> a
<> DomainIndex -> Builder
DomainIndex.toSAS DomainIndex
post