{-# LANGUAGE OverloadedRecordDot #-} {-# OPTIONS -Wpartial-fields #-} data Visitor where Member :: { _name :: String } -> Visitor NonMember :: {} -> Visitor main :: IO () main = putStrLn (makeGreeting NonMember {}) makeGreeting :: Visitor -> String makeGreeting visitor = visitor._name