我的讲师为我提供了不在GHCI中构建的代码。据我所知,它已经为我的同学正确建立了。
我指的代码是
import Data.Semigroup (Semigroup ((<>)))
GHCI向我抛出此错误
Module ‘Data.Semigroup’ does not export ‘Semigroup((<>))’
应该行吗?我的GHC版本可能有问题吗?所有其他导入语句均有效。
最终编辑
我的GHC版本可能有问题吗?
绝对可以,确切地说,这里有问题,已经太旧了:
GHC-6.12 / base-4.2
(从2010年开始,这是Semigroup软件包的发布时间)–非常感谢@leftaroundabout和@Thomas M. DuBuisson的贡献!
而且该程序包没有该(Semigroup ((<>)))
功能。因此,您看到的错误。
编辑2
发表评论后,我也尝试重现OP环境以重现错误,我在堆栈中安装了ghc版本7.10.3
,这是stack.yaml文件的外观:
resolver: lts-6.27 system-ghc: false packages: - .
在破坏了包含Main.hs文件的基本堆栈项目之后:
module Main where import Data.Semigroup main :: IO () main = do putStrLn "Hello" putStrLn "World"
我得到的错误是
/home/damian/test-semigroup/app/Main.hs:3:8:
找不到模块“ Data.Semigroup”
Use -v to see a list of the files searched for. -- While building package test-semigroup-0.1.0.0 using: /home/damian/.stack/setup-exe-cache/x86_64-linux/Cabal-simple_mPHDZzAJ_1.22.5.0_ghc-7.10.3 --builddir=.stack-work/dist/x86_64-linux/Cabal-1.22.5.0 build lib:test-semigroup exe:test-semigroup-exe --ghc-options "" Process exited with code: ExitFailure 1
较旧的版本也是如此:
适用于ghc-7.10.2的LTS 3.22,
我无法尝试:
LTS 2.22 for ghc-7.8.4,于4年前发布,因为它们要在哪里使用Cabal运行
--ghc-7.8.3的LTS 0.7,发布于5年前,因为我无法将其安装在64位OS中...
因此,可以肯定的是,我一一尝试了所有较新的LTS版本,是的...一一尝试,虽然花了一些时间但值得一试:
适用于ghc-8.6.5的LTS 13.29,今天发布
LTS 13.19 for ghc-8.6.4,于3个月前发布
LTS 13.11 for ghc-8.6.3,于4个月前发布
适用于ghc-8.4.4的LTS 12.26,于7个月前发布
LTS 12.14 for ghc-8.4.3,于9个月前发布
适用于ghc-8.2.2的LTS 11.22,于11个月前发布
适用于ghc-8.0.2的LTS 9.21,于一年前发布
适用于ghc-8.0.1的LTS 7.24,于2年之前发布
这些ghc版本都无法重现您的日志错误,因此我想尝试输入错误:
import Data.Semigroup (Semigroup ((<$>)))
要么
import Data.Semigroup (Semigroup ((=>>)))
这些给了我你的错误:
/home/damian/test-semigroup/app/Main.hs:3:24:错误:
模块'Data.Semigroup'不导出'Semigroup(())'
也就是说,该Data.Semigroup
模块存在于您的ghc
Semigroup((<>))
不属于该模块
意思是,您必须拥有最旧的ghc
版本之一...
因此,我可以认为您可以尝试:
重新安装您的ghc,然后尝试再次运行它。
请考虑使用某些工具,例如堆栈
检查您的代码,寻找一些错别字或奇怪的东西
我认为我的第一个答案很接近:
编辑1
已在ghc版本中添加8.0.1
快速搜索hoogle总是有帮助的:
这里的第一个链接是半组<>,(<>) :: Semigroup a => a -> a -> a
它说:
此版本自2016年5月起启用,ghc版本为8.0.1
。
要查看ghc的所有版本及其基本版本,请执行以下操作:
https://wiki.haskell.org/Base_package