2

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 源代码本身或其他地方找到类似的示例。

我喜欢一个解决方案(当然),但更多的是关于如何解决这类问题的提示。

4

0 回答 0