如何配置Haskell / ghci模块搜索路径?

时间:2018-04-05 14:19:46

标签: haskell ghci

我有第一个应用程序文件Myapp.hs

我已经创建了一个用于解析csv文件的模块,称为Csvparser,它在文件Csvparser.hs中定义。

两个文件都在同一目录中。

我不明白如何在Myapp.hs中导入Csvparser模块

Prelude Data.Maybe Data.List Data.Time Data.Either> :load C:\Test\Haskell\MyApp.hs
[1 of 1] Compiling Main             ( C:\Test\Haskell\MyApp.hs, interpreted )

C:\Test\Haskell\MyApp.hs:5:1: error:
    Could not find module `Csvparser'
    Use -v to see a list of the files searched for.
  |
5 | import Csvparser
  | ^^^^^^^^^^^^^^^^
Failed, no modules loaded.
Prelude Data.Maybe Data.List Data.Time Data.Either>

该模块可以独立加载

Prelude Data.Maybe Data.List Data.Time Data.Either> :load C:\Test\Haskell\Csvparser.hs
[1 of 1] Compiling Csvparser        ( C:\Test\Haskell\Csvparser.hs, interpreted )
Ok, one module loaded.
*Csvparser Data.Maybe Data.List Data.Time Data.Either> import Csvparser
*Csvparser Data.Maybe Data.List Data.Time Data.Either Csvparser> :t Csvparser.parseCSV
Csvparser.parseCSV :: String -> Either ParseError [[String]]
*Csvparser Data.Maybe Data.List Data.Time Data.Either Csvparser>

以下是MyApp.hs第5行的失败语法

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}


import Csvparser
import Database.HDBC
import Database.HDBC.ODBC

如何让ghci / haskell了解Csvparser模块可以在MyApp.hs的同一目录中找到?

1 个答案:

答案 0 :(得分:5)

如果您想从包含该文件的文件夹运行ghci,请执行以下操作:

ghci -iC:\Test\Haskell\

-i设置导入搜索路径,然后执行:

:load C:\Test\Haskell\MyApp.hs

或者从ghci控制台内部执行:

:set -iC:\Test\Haskell\

如果你想查看haskell在哪个文件夹中寻找模块,请调用:

:show paths

应打印module import search paths:

下的路径列表

如果从包含文件的文件夹中运行ghci,则不需要这一切,因为默认情况下Haskell将始终在当前文件夹中查找导入。

请勿在{{1​​}}与路径之间留出空格