多分よく分かってない
今日は割り込みによって例外が発生し、ビールを買ってしまいました、みたいな帰宅モナドのなかの話。bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket :: (とりあえずやってみろ) -> (ダメだイケてなかったから何とかしろ) -> (とりあえずがイケてるならやれ) -> IO (うまくいった結果よこせ)
try..cache..finally みたいなやつです
getFileMimeType :: String -> IO (Maybe ImageContents)
getFileMimeType file = do
magic <- magicOpen [MagicMimeType]
magicLoadDefault magic
mt <- try $ magicFile magic file
case mt of
Left (err::IOException) -> return Nothing
Right mimeType -> do
contents <- bracket (openFile file ReadMode) hClose hGetContents
return $ return $ ImageContents { unMimeType = packChars mimeType, unImageBuff = contents }
ちなみにLeft (err::IOException)がScopedTypeVariables拡張が必要らしいです。

0 件のコメント:
コメントを投稿