[Haskell-beginners] Opaque (to me) compilation error

Theodore Lief Gannon tanuki at gmail.com
Sat Nov 14 02:30:25 UTC 2015


Note that the analysis in my previous message is based on a trick I saw a
year ago and clearly don't properly remember or understand, because there
is no "Id" monad and the *Identity* monad is apparently not in base (though
you might still have it there, it's in both mtl and transformers).

But the bit about your type signature still stands. I'm quite certain of
that part. :)

On Fri, Nov 13, 2015 at 9:24 PM, Theodore Lief Gannon <tanuki at gmail.com>
wrote:

> You're missing IO in the type declaration, which I believe means that do
> block is running in the Id monad -- by inference, Id ByteString.
>
> On Fri, Nov 13, 2015 at 8:41 PM, Dan Stromberg <strombrg at gmail.com> wrote:
>
>>
>> In the following code:
>> prefix_md5 :: String -> Data.ByteString.ByteString
>> prefix_md5 filename = do
>>     let prefix_length = 1024
>>     file <- System.IO.openBinaryFile filename System.IO.ReadMode :: (IO
>> System.IO.Handle)
>>     data_read <- Data.ByteString.hGet file prefix_length :: (IO
>> Data.ByteString.ByteString)
>>     _ <- System.IO.hClose file
>>     let hasher = Crypto.Hash.MD5.init :: Crypto.Hash.MD5.Ctx
>>     let hasher2 = Crypto.Hash.MD5.update hasher data_read ::
>> Crypto.Hash.MD5.Ctx
>>     let digest = Crypto.Hash.MD5.finalize hasher2 ::
>> Data.ByteString.ByteString
>>     return digest :: (IO Data.ByteString.ByteString)
>>
>> I get the error:
>> Md5s.hs:13:5:
>>     Couldn't match type `IO Data.ByteString.ByteString'
>>                   with `Data.ByteString.ByteString'
>>     Expected type: IO System.IO.Handle
>>                    -> (System.IO.Handle -> IO Data.ByteString.ByteString)
>>                    -> Data.ByteString.ByteString
>>       Actual type: IO System.IO.Handle
>>                    -> (System.IO.Handle -> IO Data.ByteString.ByteString)
>>                    -> IO Data.ByteString.ByteString
>>     In a stmt of a 'do' block:
>>       file <- System.IO.openBinaryFile filename System.IO.ReadMode ::
>>                 IO System.IO.Handle
>>
>> 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!
>>
>> How might I correct this function to eliminate the error?
>>
>> Thanks!
>>
>> --
>> Dan Stromberg
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20151113/71afe98c/attachment.html>


More information about the Beginners mailing list