{-# 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.GhcSyntax, module Data.HList.GhcRecord, module Data.HList.GhcExperiments, module Data.STRef, module Data.IORef, module Data.Typeable, module Control.Monad, module Control.Monad.ST, module Control.Monad.Fix, module GHC.IOBase, -- module DeepNarrow, -- module Nominal, -- module New, -- module Data.HList.HList concrete, (#) ) where import Data.HList.CommonMain hiding ( HDeleteMany , hDeleteMany , TypeCast , typeCast ) import Data.HList.GhcSyntax import Data.HList.GhcRecord import Data.HList.GhcExperiments import Data.STRef import Data.IORef import Data.Typeable import Control.Monad import Control.Monad.ST import Control.Monad.Fix import GHC.IOBase hiding (stToIO, writeIORef, readIORef, newIORef, IORef,unsafeIOToST,unsafeSTToIO) infixr 9 # (#) :: (HasField l r v) => r -> l -> v m # field = (m .!. field) concrete :: (MonadFix m) => (a -> m a) -> a -> m a concrete generator self = generator self where _ = mfix generator