{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE Safe #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE RankNTypes #-} {-| Module: Control.Object Copyright: (C) 2015 The University of Kansas License: BSD-style (see the file LICENSE) Maintainer: Andy Gill Stability: Experimental An Object type, which is a natural transformation into the 'IO' monad. -} module Control.Object (Object(..), (#)) where import Control.Natural -- | An 'Object' is a natural transformation from a given 'Functor' 'f', to 'IO'. newtype Object f = Object (f ~> IO) instance Transformation f IO (Object f) where Object f # g = NT f # g