一些术语:你用 cabal 安装的是一个“包”。您在代码中导入的是“模块”。
我正在尝试构建 TCP 服务器并正在使用网络模块
据我所知,任何现代 Haskell 包中都没有“网络”模块。这将是您的第一个问题。
导入网络(listenOn、withSocketsDo、accept、PortID(..)、Socket)
如果您是新手并从资源中了解了此模块和功能,那么请寻找新的东西 - 两年前,网络包发生了变化,不再将“网络”作为模块导出。
cabal 似乎没有找到网络模块
cabal 再次安装包,所以您可能指的是网络包。 Cabal 确实知道这个包:
bash-3.2$ cabal update 2>/dev/null 1>&2 && cabal info network
* network (library)
Synopsis: Low-level networking interface
...
而 ghc-pkg 列表什么也没有显示
ghc-pkg 这些天真的很低级,坦率地说是不够的。它不处理新 GHC 中使用的包环境。例如,您可以设置 .ghc.environment 并使用其中列出的库,而 ghc-pkg 不会告诉您这些软件包已安装。
例如下面我安装network 并让cabal 编写一个ghc 环境文件,然后让ghc-pkg 列出网络包(未列出),然后在GHCi 中使用网络包(GHCi 知道读取环境文件) .
tommd@ovdak /tmp% cabal install --package-env . --lib network
Resolving dependencies...
Up to date
cabal install --package-env . --lib network 2.60s user 0.49s system 95% cpu 3.254 total
tommd@ovdak /tmp% ghc-pkg list network
/Users/tommd/.ghcup/ghc/8.10.1/lib/ghc-8.10.1/package.conf.d
(no packages)
tommd@ovdak /tmp% ghci
GHCi, version 8.10.1: https://www.haskell.org/ghc/ :? for help
Loaded package environment from /private/tmp/.ghc.environment.x86_64-darwin-8.10.1
package flags have changed, resetting and loading new packages...
Loaded GHCi configuration from /Users/tommd/.ghci
Prelude> import Network.Socket
Prelude Network.Socket>