module Ast where
import Text.PrettyPrint.GenericPretty
newtype Header
= Header (String, Double, Double)
deriving (Eq, Show, Generic)
instance Out Header
data Mood
= Positive
| Negative
| Neutral
| Impartial
| Warning
deriving (Eq, Show, Generic)
instance Out Mood
data CommentPart
= CommentStr String
| CommentCmt Comment
deriving (Eq, Show, Generic)
instance Out CommentPart
newtype Comment
= Comment (Mood, [CommentPart])
deriving (Eq, Show, Generic)
instance Out Comment
newtype Property
= Property (String, PropertyExp)
deriving (Eq, Show, Generic)
instance Out Property
data PropertyExp
= Lookup (Int, String)
| Sum String
| Value String
| Num Double
deriving (Eq, Show, Generic)
instance Out PropertyExp
data Judgement
= Judgement (Header, [Property], [Comment], [Judgement])
| Bonus (Double, [Property], [Comment])
deriving (Eq, Show, Generic)
instance Out Judgement
isLeafJ :: Judgement -> Bool
isLeafJ (Judgement (_, _, _, [])) = True
isLeafJ (Judgement (_, _, _, (_:_))) = False
isLeafJ (Bonus _) = False
isNodeJ :: Judgement -> Bool
isNodeJ (Judgement (_, _, _, [])) = False
isNodeJ (Judgement (_, _, _, (_:_))) = True
isNodeJ (Bonus _) = False
isBonus :: Judgement -> Bool
isBonus (Bonus _) = True
isBonus (Judgement _) = False