{-# LANGUAGE OverloadedRecordDot #-} module Foo where data Foo = Foo data OurOwnFoo = OurOwnFoo data OurOwnBar = OurOwnBar {ourOwnBar :: OurOwnFoo -> String} bar :: Foo -> String bar = undefined encodeFoo :: OurOwnFoo -> Foo encodeFoo = undefined ourOwnBarImplementation :: OurOwnBar ourOwnBarImplementation = OurOwnBar $ bar . encodeFoo applicationBar :: OurOwnFoo -> String applicationBar = ourOwnBarImplementation.ourOwnBar