Hedgehog 官方网站上有一篇文章详细介绍了如何编写使用 IO 的 Hedgehog 生成器。里面的相关代码是:
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Text.IO as T
import Hedgehog
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range
genWord :: MonadIO m => GenT m Text
genWord = do
ws <- T.lines <$> liftIO (T.readFile "/usr/share/dict/words")
Gen.element ws
...随后Gen.sample genWord
实际调用生成器来创建一些 Text 值。
代码语法检查良好。但是,当我尝试运行它时,我被告知:
• Could not deduce (MonadIO Data.Functor.Identity.Identity)
arising from a use of ‘genWord’
from the context: MonadIO m
bound by the inferred type of it :: MonadIO m => m Text
at <interactive>:62:1-27
我认为发生错误是因为该示例仅来自旧版本的库或 GHC,但我不知道如何追踪实际问题并修复它。我无法在 Hedgehog 源代码本身或其他地方找到类似的示例。
我喜欢一个解决方案(当然),但更多的是关于如何解决这类问题的提示。