{-# LANGUAGE  DeriveDataTypeable, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, TemplateHaskell, UndecidableInstances #-}

import Data.Data (Data, Typeable)
import NewData (deriveNewData)
import Default (Default(defaultValue))

data Proposition = Proposition Expression deriving (Show, Data, Typeable)
data Expression = Conjunction [Expression] deriving (Show, Data, Typeable)

$(deriveNewData [''Proposition, ''Expression])

main :: IO ()
main = putStrLn (show (defaultValue :: Proposition))
