<div dir="ltr"><div><div><div><div><br>In the following code:<br><div style="margin-left:40px">prefix_md5 :: String -> Data.ByteString.ByteString<br>prefix_md5 filename = do<br>    let prefix_length = 1024<br>    file <- System.IO.openBinaryFile filename System.IO.ReadMode :: (IO System.IO.Handle)<br>    data_read <- Data.ByteString.hGet file prefix_length :: (IO Data.ByteString.ByteString)<br>    _ <- System.IO.hClose file<br>    let hasher = Crypto.Hash.MD5.init :: Crypto.Hash.MD5.Ctx<br>    let hasher2 = Crypto.Hash.MD5.update hasher data_read :: Crypto.Hash.MD5.Ctx<br>    let digest = Crypto.Hash.MD5.finalize hasher2 :: Data.ByteString.ByteString<br>    return digest :: (IO Data.ByteString.ByteString)<br></div><br clear="all"></div>I get the error:<br><div style="margin-left:40px">Md5s.hs:13:5:<br>    Couldn't match type `IO Data.ByteString.ByteString'<br>                  with `Data.ByteString.ByteString'<br>    Expected type: IO System.IO.Handle<br>                   -> (System.IO.Handle -> IO Data.ByteString.ByteString)<br>                   -> Data.ByteString.ByteString<br>      Actual type: IO System.IO.Handle<br>                   -> (System.IO.Handle -> IO Data.ByteString.ByteString)<br>                   -> IO Data.ByteString.ByteString<br>    In a stmt of a 'do' block:<br>      file <- System.IO.openBinaryFile filename System.IO.ReadMode ::<br>                IO System.IO.Handle<br></div><br></div>How should I interpret that error to solve this kind of problem on my own in the future?  I don't see where the line in question does anything with ByteString's!<br><br></div>How might I correct this function to eliminate the error?<br><br></div>Thanks!<br><div><div><div><br><div>-- <br><div class="gmail_signature">Dan Stromberg</div>
</div></div></div></div></div>