-- | Stolen from rack-contrib: Automatically sets the ETag header on all -- String bodies module Hack.Contrib.Middleware.ETag (etag) where import Hack import Hack.Contrib.Utils import Hack.Contrib.Response import Hack.Contrib.Constants import MPSUTF8 import Prelude hiding ((.), (^), (>)) import Data.Digest.Pure.MD5 import Data.ByteString.Lazy.Char8 as C etag :: Middleware etag app = \env -> do r <- app env if r.has_header _ETag then r.return else r.set_header _ETag (r.tag) .return where tag = body > C.pack > md5 > show