多分よく分かってない
今日は割り込みによって例外が発生し、ビールを買ってしまいました、みたいな帰宅モナドのなかの話。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 件のコメント:
コメントを投稿