@@ -6,6 +6,7 @@
66{-# LANGUAGE DataKinds #-}
77{-# LANGUAGE PolyKinds #-}
88{-# LANGUAGE GeneralizedNewtypeDeriving #-}
9+{-# LANGUAGE MagicHash #-}
910
1011-- | See "Control.Monad.Trans.Reader".
1112
@@ -24,6 +25,7 @@ module Control.Monad.Trans.Ether.Reader
2425 , local
2526 ) where
2627
28+import GHC.Prim (Proxy#)
2729import Data.Functor.Identity (Identity(..))
2830import qualified Control.Monad.Trans.Reader as Trans
2931import Control.Monad.Trans.Ether.Tagged
@@ -44,26 +46,26 @@ type Reader tag r = ReaderT tag r Identity
4446type ReaderT tag r = TaggedTrans tag (Trans.ReaderT r)
4547
4648-- | Constructor for computations in the reader monad transformer.
47−readerT :: proxy tag -> (r -> m a) -> ReaderT tag r m a
49+readerT :: Proxy# tag -> (r -> m a) -> ReaderT tag r m a
4850readerT _ = pack . Trans.ReaderT
4951
5052-- | Constructor for computations in the reader monad
5153-- (the inverse of 'runReader').
52−reader :: Monad m => proxy tag -> (r -> a) -> ReaderT tag r m a
54+reader :: Monad m => Proxy# tag -> (r -> a) -> ReaderT tag r m a
5355reader _ = pack . Trans.reader
5456
5557-- | Runs a 'ReaderT' with the given environment
5658-- and returns the final value.
57−runReaderT :: proxy tag -> ReaderT tag r m a -> r -> m a
59+runReaderT :: Proxy# tag -> ReaderT tag r m a -> r -> m a
5860runReaderT _ = Trans.runReaderT . unpack
5961
6062-- | Runs a 'ReaderT' with the given environment
6163-- and returns the final value.
62−runReader :: proxy tag -> Reader tag r a -> r -> a
64+runReader :: Proxy# tag -> Reader tag r a -> r -> a
6365runReader _ = Trans.runReader . unpack
6466
6567-- | Fetch the value of the environment.
66−ask :: Monad m => proxy tag -> ReaderT tag r m r
68+ask :: Monad m => Proxy# tag -> ReaderT tag r m r
6769ask _ = pack Trans.ask
6870
6971-- | Execute a computation in a modified environment
@@ -71,7 +73,7 @@ ask _ = pack Trans.ask
7173--
7274-- * @'runReaderT' tag ('local' tag f m) = 'runReaderT' tag m . f@
7375local
74− :: proxy tag
76+ :: Proxy# tag
7577 -> (r -> r)
7678 -- ^ The function to modify the environment.
7779 -> ReaderT tag r m a