@@ -6,7 +6,8 @@
6{-# LANGUAGE DataKinds #-}
6{-# LANGUAGE DataKinds #-}
7{-# LANGUAGE PolyKinds #-}
7{-# LANGUAGE PolyKinds #-}
8{-# LANGUAGE GeneralizedNewtypeDeriving #-}
8{-# LANGUAGE GeneralizedNewtypeDeriving #-}
9−{-# LANGUAGE MagicHash #-}
9+{-# LANGUAGE AllowAmbiguousTypes #-}
10+{-# LANGUAGE ScopedTypeVariables #-}
11-- | See "Control.Monad.Trans.Reader".
12-- | See "Control.Monad.Trans.Reader".
@@ -25,7 +26,6 @@ module Control.Monad.Trans.Ether.Reader
28−import GHC.Prim (Proxy#)
29import Data.Functor.Identity (Identity(..))
29import Data.Functor.Identity (Identity(..))
30import qualified Control.Monad.Trans.Reader as Trans
30import qualified Control.Monad.Trans.Reader as Trans
31import Control.Monad.Trans.Ether.Tagged
31import Control.Monad.Trans.Ether.Tagged
@@ -46,37 +46,37 @@ type Reader tag r = ReaderT tag r Identity
46type ReaderT tag r = TaggedTrans tag (Trans.ReaderT r)
46type ReaderT tag r = TaggedTrans tag (Trans.ReaderT r)
48-- | Constructor for computations in the reader monad transformer.
48-- | Constructor for computations in the reader monad transformer.
49−readerT :: Proxy# tag -> (r -> m a) -> ReaderT tag r m a
49+readerT :: forall tag r m a . (r -> m a) -> ReaderT tag r m a
50−readerT _ = pack . Trans.ReaderT
50+readerT = pack . Trans.ReaderT
52-- | Constructor for computations in the reader monad
52-- | Constructor for computations in the reader monad
53-- (the inverse of 'runReader').
53-- (the inverse of 'runReader').
54−reader :: Monad m => Proxy# tag -> (r -> a) -> ReaderT tag r m a
54+reader :: forall tag r m a . Monad m => (r -> a) -> ReaderT tag r m a
55−reader _ = pack . Trans.reader
55+reader = pack . Trans.reader
57-- | Runs a 'ReaderT' with the given environment
57-- | Runs a 'ReaderT' with the given environment
58-- and returns the final value.
58-- and returns the final value.
59−runReaderT :: Proxy# tag -> ReaderT tag r m a -> r -> m a
59+runReaderT :: forall tag r m a . ReaderT tag r m a -> r -> m a
60−runReaderT _ = Trans.runReaderT . unpack
60+runReaderT = Trans.runReaderT . unpack
62-- | Runs a 'ReaderT' with the given environment
62-- | Runs a 'ReaderT' with the given environment
63-- and returns the final value.
63-- and returns the final value.
64−runReader :: Proxy# tag -> Reader tag r a -> r -> a
64+runReader :: forall tag r a . Reader tag r a -> r -> a
65−runReader _ = Trans.runReader . unpack
65+runReader = Trans.runReader . unpack
67-- | Fetch the value of the environment.
67-- | Fetch the value of the environment.
68−ask :: Monad m => Proxy# tag -> ReaderT tag r m r
68+ask :: forall tag r m . Monad m => ReaderT tag r m r
69−ask _ = pack Trans.ask
69+ask = pack Trans.ask
71-- | Execute a computation in a modified environment
71-- | Execute a computation in a modified environment
72-- (a specialization of 'withReaderT').
72-- (a specialization of 'withReaderT').
74-- * @'runReaderT' tag ('local' tag f m) = 'runReaderT' tag m . f@
74-- * @'runReaderT' tag ('local' tag f m) = 'runReaderT' tag m . f@
76− :: Proxy# tag
76+ :: forall tag r m a
77− -> (r -> r)
77+ . (r -> r)
78 -- ^ The function to modify the environment.
78 -- ^ The function to modify the environment.
79 -> ReaderT tag r m a
79 -> ReaderT tag r m a
80 -- ^ Computation to run in the modified environment.
80 -- ^ Computation to run in the modified environment.
81 -> ReaderT tag r m a
81 -> ReaderT tag r m a
82−local _ f = pack . Trans.withReaderT f . unpack
82+local f = pack . Trans.withReaderT f . unpack