{-# LANGUAGE DeriveGeneric #-}
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
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)
| Value String
| Num Double
deriving (Eq, Show, Generic)
instance Out PropertyExp
data Judgement
= Judgement (Header, [Property], [Comment], [Judgement])
| Bonus (Double, [Comment])
deriving (Eq, Show, Generic)
instance Out Judgement