MonadThrow从LTS 11.0开始不在范围内

时间:2018-06-22 02:44:47

标签: haskell haskell-stack

我发现使用

me$ stack install --resolver lts-11.0上的

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where

import ClassyPrelude
import Network.HTTP.Conduit (host)

hostnameFromUrl :: MonadThrow m => Text -> m Text
hostnameFromUrl url = do
    return $ decodeUtf8 $ host "helloworld.com"

失败并显示消息

/Users/me/.../temp/Main.hs:8:20: error:
    Not in scope: type constructor or class ‘MonadThrow’
  |
8 | hostnameFromUrl :: MonadThrow m => Text -> m Text
  |                    ^^^^^^^^^^

当使用任何lts> = 11.0时。 lts <= 10.10不会引发任何错误。

这似乎很奇怪,因为这两个LTS之间有相关的软件包(exceptions-0.8.3does not change

我有stack.yaml个文件

resolver: lts-11.0
packages:
  - '.'
flags: {}
extra-package-dbs: []

temp.cabal文件

name:                temp
version:             0.0
build-type:          Simple
-- extra-source-files:
cabal-version:       >=1.10

library
  hs-source-dirs:      .
  exposed-modules:     Main
  ghc-options:         -Wall
  build-depends:       classy-prelude >= 1.0.0.2
                     , http-conduit >= 2.1
  default-language:    Haskell2010

请注意具体设置;我试图使它尽可能容易地复制。

任何见识将不胜感激!谢谢。

1 个答案:

答案 0 :(得分:3)

它不再从ClassyPrelude导出,您需要从Control.Monad.Catch导入。