[web-devel] Yesod Monoid instance for Endo [Header]
Tyson Whitehead
twhitehead at gmail.com
Wed Jun 8 20:25:11 CEST 2011
Hi All,
I've been working my way through Yesod and noticed an irregularity.
The GGHanlder monad stack (Yesod/Handler.hs)
type GHInner s m monad a =
ReaderT (HandlerData s m) (
ErrorT HandlerContents (
WriterT (Endo [Header]) (
StateT GHState monad
)
)
) a
has a WriterT member based on "Endo [Header]", which is locally defined as
type Endo a = a -> a
Therefore, unless I'm missing something, the Writer T Monoid instance must be
Monoid b => Monoid (a -> b)
Monoid [a]
(i.e., an environment to list construct). Assuming the results a finally
extracted by applying [] (an empty environment), this would mean
addHeader = GHandler . lift . lift . tell . (:)
degrades to (++), giving non-constant time concatenation.
I'm thinking what was really meant was to use the Endo Monoid instance,
thereby gaining the constant-time concatenation via function composition.
Cheers! -Tyson
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: This is a digitally signed message part.
URL: <http://www.haskell.org/pipermail/web-devel/attachments/20110608/73ff3af6/attachment.pgp>
More information about the web-devel
mailing list