{-# LANGUAGE MagicHash #-} {- | OOHaskell (C) 2004, Oleg Kiselyov, Ralf Laemmel, Keean Schupke This module gathers the API that we need for OOP in Haskell. We basically select a certain configuration of the HList library, and we also import modules that are needed for mutable data and monads. Note on overlapping: Needed for the chosen model of labels. Other models can be used instead, but the chosen look better in types. -} module Data.HList ( module Data.HList.CommonMain, -- module Data.HList.RecordAdv, module Data.STRef, module Data.IORef, module Data.Typeable, module Control.Monad, module Control.Monad.ST, module Control.Monad.Fix, -- module DeepNarrow, -- module Nominal, -- module New, -- module Data.HList.HList concrete, (#) ) where import Data.HList.CommonMain hiding ( HDeleteMany , hDeleteMany ) -- import Data.HList.RecordAdv import Data.STRef import Data.IORef import Data.Typeable import Control.Monad import Control.Monad.ST import Control.Monad.Fix infixr 9 # (#) :: HasField l r v => r -> Label l -> v m # field = (m .!. field) concrete :: (MonadFix m) => (a -> m a) -> a -> m a concrete generator self = generator self where _ = mfix generator