nic*_*ole 5 haskell functional-programming
我正在学习我的第一个函数式编程语言,但在初始后勤方面遇到了一些麻烦(教授基本上说,"以某种方式设置它"并没有提供太多细节.)
无论如何,我有Mac OS X版本10.6.8.首先,我在我的主目录中安装了GHC,发现我可以在终端中使用命令"ghci"打开它.从那里(借口我完全缺乏知识),我按照教学大纲中的模糊指示,打开了另一个窗口,其中包含我要修改的a1.hs文件作业.当我完成一个函数的定义时,我输入了命令"ghc a1-skeleton.hs"来打开加载到它的解释器(这就是我要做的,对吧?)但是得到了这个错误:
a1.hs:5:8:
Could not find module `System'
It is a member of the hidden package `haskell98-2.0.0.1'.
Use -v to see a list of the files searched for.
Run Code Online (Sandbox Code Playgroud)
我猜这就像在C++这样的语言中缺少一个"#include"或类似的东西.我只需要在特定目录中查找/添加内容吗?
此外,由于我没有立即抓住这些东西,翻译究竟做了什么?它是一个程序,它在程序语言意义上跳过'编译'并且只是试图立即遵循.hs文件中的命令吗?
谢谢!
UPDATE ::似乎是问题的代码:
2 module Main where
3
4 import Test.HUnit
5 import System
Run Code Online (Sandbox Code Playgroud)
问题可能是System模块是旧的非分层名称.我认为您现在需要使用类似的模块System.Environment(取决于您要导入的确切功能).
由于您没有使用这些模块中的任何功能,我无法准确地告诉您要导入的内容.在GHCi中,您可以查看模块定义的功能如下:
Prelude> :browse System.Environment
getArgs :: IO [String]
getEnv :: String -> IO String
getEnvironment :: IO [(String, String)]
getProgName :: IO String
withArgs :: [String] -> IO a -> IO a
withProgName :: String -> IO a -> IO a
Run Code Online (Sandbox Code Playgroud)
您可以尝试删除该import System语句并加载该文件.然后,您应该获得一些不在范围内的标识符.现在你可以将它们输入到Hoogle(这将是你最好的朋友,巧合),看看它们的定义.
我的理解是旧System模块的功能现在在System.Environment,System.Process和System.Exit.如果你不想深入思考它,你可以直接导入所有三个:P.
关于你的小问题:
ghci 也进行编译,但与非交互式 ghc 不同,它不会创建高效的机器代码,而是编译为更简单的内部字节码,然后直接解释。基本上 ghci 是为了快速编译(正如您想要的快速开发)而优化的,而不是让结果快速运行。
此外,它还包含其他用于交互式使用的有用内容,例如读取-评估-打印循环和调试器。