如何导入GHCi路径中的模块?

时间:2017-05-19 16:00:07

标签: haskell ghci

我直接执行ghci时似乎无法导入模块,但是我可以在执行ghci xmonad.hs时加载模块。

目录树:

.
├── ghcid.sh
├── lib
│   ├── FocusWindow.hs
│   ├── MiddleColumn.hs
│   ├── Readme.md
│   └── TAGS
├── Readme.md
├── TAGS
├── xmonad2.hs
├── xmonad.errors
├── xmonad.hs
├── xmonad.state
├── xmonad.state.backup
└── xmonad-x86_64-linux

.ghci

:set -Wall
:set -i:lib

ghci提示:

Prelude> :show paths
current working directory: 
  /home/chris/.xmonad
module import search paths:
  .
  lib
Display all 2040 possibilities? (y or n)
Prelude> import FocusWindow

<no location info>: error:
    Could not find module ‘FocusWindow’
    It is not a module in the current program, or in any known package.

ghci xmonad.hs提示

GHCi, version 8.0.1: http://www.haskell.org/ghc/  :? for help
Loaded GHCi configuration from /home/chris/.xmonad/.ghci
[1 of 3] Compiling FocusWindow      ( lib/FocusWindow.hs, interpreted )
[2 of 3] Compiling MiddleColumn     ( lib/MiddleColumn.hs, interpreted )
[3 of 3] Compiling Main             ( xmonad.hs, interpreted )
Ok, modules loaded: MiddleColumn, FocusWindow, Main.
*Main> import FocusWindow
*Main FocusWindow> :show paths
current working directory: 
  /home/chris/.xmonad
module import search paths:
  .
  lib

1 个答案:

答案 0 :(得分:4)

您只能导入来自某个已知包或已加载的模块。当您运行ghci xmonad.hs时,它会加载xmonad.hs以及它所需的所有模块。当您运行ghci时,默认情况下它不会加载任何内容。

您可以通过运行:load FocusWindow:l FocusWindow来单独加载您的模块。这将自动以特殊方式“导入”该模块(特别是:使所有名称可用,甚至是未导出的名称),并且您还可以正常导入FocusWindow使用的模块。

ghci的import支持在抱怨之前尝试加载未知模块可能是一个很好的功能。我怀疑添加该功能的补丁将被接受。