{-# LANGUAGE RecordWildCards #-} data Foo = Foo { a :: Int , b :: Int , c :: Int } x :: Foo -> Int x Foo{a = 42} = a y :: Foo -> Int y Foo{a, b, c} = a + b + c z :: Foo -> Int z Foo{..} = a + b + c