Не удалось сопоставить ожидаемый тип `Data.ByteString.Internal.ByteString 'с фактическим типом` ByteString'

Запуск следующего кода:

import Crypto.BCrypt
import Data.ByteString.Lazy.Char8

main = do
  maybe_pwhash <- hashPasswordUsingPolicy slowerBcryptHashingPolicy (pack "hunter2")
  print $ maybe_pwhash

Я получаю следующую ошибку компиляции:

test.hs:5:70:
    Couldn't match expected type `Data.ByteString.Internal.ByteString'
                with actual type `ByteString'
    In the return type of a call of `pack'
    In the second argument of `hashPasswordUsingPolicy', namely
      `(C.pack "hunter2")'
    In a stmt of a 'do' block:
      maybe_pwhash <- hashPasswordUsingPolicy
                        slowerBcryptHashingPolicy (pack "hunter2")

Я запутался, потому что не понимаю, почему существует разница между Data.ByteString.Internal.ByteString и a ByteString.

Ответы

Ответ 1

В соответствии с bcrypt docs вы должны использовать строгие байты

import Data.ByteString.Char8

вместо ленивых:

import Data.ByteString.Lazy.Char8