@@ -1,5 +1,6 @@
1{-# LANGUAGE ConstraintKinds #-}
1{-# LANGUAGE ConstraintKinds #-}
2{-# LANGUAGE ScopedTypeVariables #-}
2{-# LANGUAGE ScopedTypeVariables #-}
3+{-# LANGUAGE MagicHash #-}
4-- | See "Control.Monad.Ether.Writer".
5-- | See "Control.Monad.Ether.Writer".
@@ -24,7 +25,7 @@ module Control.Monad.Ether.Implicit.Writer
24 , execWriterT
25 , execWriterT
27−import Data.Proxy
28+import GHC.Prim (Proxy#, proxy#)
28import qualified Control.Monad.Ether.Writer as Explicit
29import qualified Control.Monad.Ether.Writer as Explicit
30-- | See 'Control.Monad.Ether.Writer.MonadWriter'.
31-- | See 'Control.Monad.Ether.Writer.MonadWriter'.
@@ -32,50 +33,50 @@ type MonadWriter w = Explicit.MonadWriter w w
33-- | See 'Control.Monad.Ether.Writer.writer'.
34-- | See 'Control.Monad.Ether.Writer.writer'.
34writer :: forall w m a . MonadWriter w m => (a, w) -> m a
35writer :: forall w m a . MonadWriter w m => (a, w) -> m a
35−writer = Explicit.writer (Proxy :: Proxy w)
36+writer = Explicit.writer (proxy# :: Proxy# w)
37-- | See 'Control.Monad.Ether.Writer.tell'.
38-- | See 'Control.Monad.Ether.Writer.tell'.
38tell :: forall w m . MonadWriter w m => w -> m ()
39tell :: forall w m . MonadWriter w m => w -> m ()
39−tell = Explicit.tell (Proxy :: Proxy w)
40+tell = Explicit.tell (proxy# :: Proxy# w)
41-- | See 'Control.Monad.Ether.Writer.listen'.
42-- | See 'Control.Monad.Ether.Writer.listen'.
42listen :: forall w m a . MonadWriter w m => m a -> m (a, w)
43listen :: forall w m a . MonadWriter w m => m a -> m (a, w)
43−listen = Explicit.listen (Proxy :: Proxy w)
44+listen = Explicit.listen (proxy# :: Proxy# w)
45-- | See 'Control.Monad.Ether.Writer.pass'.
46-- | See 'Control.Monad.Ether.Writer.pass'.
46pass :: forall w m a . MonadWriter w m => m (a, w -> w) -> m a
47pass :: forall w m a . MonadWriter w m => m (a, w -> w) -> m a
47−pass = Explicit.pass (Proxy :: Proxy w)
48+pass = Explicit.pass (proxy# :: Proxy# w)
49-- | See 'Control.Monad.Ether.Writer.listens'.
50-- | See 'Control.Monad.Ether.Writer.listens'.
50listens :: forall w m a b . MonadWriter w m => (w -> b) -> m a -> m (a, b)
51listens :: forall w m a b . MonadWriter w m => (w -> b) -> m a -> m (a, b)
51−listens = Explicit.listens (Proxy :: Proxy w)
52+listens = Explicit.listens (proxy# :: Proxy# w)
53-- | See 'Control.Monad.Ether.Writer.censor'.
54-- | See 'Control.Monad.Ether.Writer.censor'.
54censor :: forall w m a . MonadWriter w m => (w -> w) -> m a -> m a
55censor :: forall w m a . MonadWriter w m => (w -> w) -> m a -> m a
55−censor = Explicit.censor (Proxy :: Proxy w)
56+censor = Explicit.censor (proxy# :: Proxy# w)
57-- | See 'Control.Monad.Ether.Writer.Writer'.
58-- | See 'Control.Monad.Ether.Writer.Writer'.
58type Writer w = Explicit.Writer w w
59type Writer w = Explicit.Writer w w
60-- | See 'Control.Monad.Ether.Writer.runWriter'.
61-- | See 'Control.Monad.Ether.Writer.runWriter'.
61runWriter :: Writer w a -> (a, w)
62runWriter :: Writer w a -> (a, w)
62−runWriter = Explicit.runWriter Proxy
63+runWriter = Explicit.runWriter proxy#
64-- | See 'Control.Monad.Ether.Writer.execWriter'.
65-- | See 'Control.Monad.Ether.Writer.execWriter'.
65execWriter :: Writer w a -> w
66execWriter :: Writer w a -> w
66−execWriter = Explicit.execWriter Proxy
67+execWriter = Explicit.execWriter proxy#
68-- | See 'Control.Monad.Ether.Writer.WriterT'.
69-- | See 'Control.Monad.Ether.Writer.WriterT'.
69type WriterT w = Explicit.WriterT w w
70type WriterT w = Explicit.WriterT w w
71-- | See 'Control.Monad.Ether.Writer.writerT'.
72-- | See 'Control.Monad.Ether.Writer.writerT'.
72writerT :: m (a, w) -> WriterT w m a
73writerT :: m (a, w) -> WriterT w m a
73−writerT = Explicit.writerT Proxy
74+writerT = Explicit.writerT proxy#
75-- | See 'Control.Monad.Ether.Writer.runWriterT'.
76-- | See 'Control.Monad.Ether.Writer.runWriterT'.
76runWriterT :: WriterT w m a -> m (a, w)
77runWriterT :: WriterT w m a -> m (a, w)
77−runWriterT = Explicit.runWriterT Proxy
78+runWriterT = Explicit.runWriterT proxy#
79-- | See 'Control.Monad.Ether.Writer.execWriterT'.
80-- | See 'Control.Monad.Ether.Writer.execWriterT'.
80execWriterT :: Monad m => WriterT w m a -> m w
81execWriterT :: Monad m => WriterT w m a -> m w
81−execWriterT = Explicit.execWriterT Proxy
82+execWriterT = Explicit.execWriterT proxy#