You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
And I'm calling the function in a wai + warp context, where I get the exception in the issue title.
dataEnv=Env{guessMimeType::FilePath->MaybeString}-- a couple more lines to build the Env that are omittedapp::Env->Application
app env request respond =do
cwd <-FS.getCurrentDirectory
let path = (cwd <>) $ unpack $ rawPathInfo request
exists <-FS.doesFileExist path
respond $if exists
thencase guessMimeType env path ofNothing-> responseLBS status415 []"Unsupported media type"Just mimetype -> responseFile status200 [("Content-Type", pack mimetype)] path Nothingelse responseLBS status404 []"Not found"
I'm no expert in laziness, or Lazy IO for that matter, but if I where to guess it's because the underlying functions use foldls without any strictness in the accumulator.
The text was updated successfully, but these errors were encountered:
I've played around with switching foldl to foldr, changing to strict Maps and such, but in the end what worked was to make the result itself strict before the handle is closed
diff --git a/hackage/MissingH-1.6.0.1/src/Data/MIME/Types.hs b/hackage/MissingH-1.6.0.1/src/Data/MIME/Types.hs
index ecdfd03..cc16134 100644
--- a/hackage/MissingH-1.6.0.1/src/Data/MIME/Types.hs+++ b/hackage/MissingH-1.6.0.1/src/Data/MIME/Types.hs@@ -18,6 +18,7 @@ Utilities for guessing MIME types of files.
Written by John Goerzen, jgoerzen\@complete.org
-}
+{-# LANGUAGE BangPatterns #-}
module Data.MIME.Types (-- * Creating Lookup Objects
defaultmtd,
readMIMETypes,
@@ -190,7 +191,7 @@ readSystemMIMETypes mtd =
case fn of
Left (_ :: Control.Exception.IOException) -> return inputobj
Right h -> do
- x <- hReadMIMETypes inputobj True h+ !x <- hReadMIMETypes inputobj True h
hClose h
return x
in
I'm wrapping the initialization of the
Data.MIME.Types.guessType
call with the following functionAnd I'm calling the function in a wai + warp context, where I get the exception in the issue title.
I'm no expert in laziness, or Lazy IO for that matter, but if I where to guess it's because the underlying functions use
foldl
s without any strictness in the accumulator.The text was updated successfully, but these errors were encountered: