在刺猬官方网站上有一个post,详细说明了如何编写使用IO的刺猬生成器。其中的相关代码是:
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的旧版本,但是我对如何跟踪实际问题并进行修复不知所措。我在刺猬资源本身或其他地方都找不到类似的例子。
(当然)我希望有一个解决方案,但是总体而言,还有更多关于如何解决此类问题的提示。