我已经开始自学Haskell了,为此我已经安装了适用于Windows 的Haskell平台.我现在正在使用WinGHCi.我了解到它有:cd用于更改目录的命令.但问题是,我怎么知道我目前在哪个目录?我不知道为什么要更改目录.我搜索了很多但找不到答案.
请告诉我是否有办法知道当前的工作目录.我最好配置命令提示符本身来显示当前目录,就像Linux的控制台一样.
按照@Daniel的建议,我做了这些:
.ghci文件(我认为这是类Unix操作系统),所以我创建了一个文件ghci.conf的C:\Users\Apelles\AppData\Roaming\ghc文件夹,因为它是在这里指示.ghci.conf.ghci.exe这是类似控制台的窗口.我注意到它加载了比之前通常用于加载的模块更多的模块.这是快照:
你可以看到它加载了更多的模块,最后一行说,
无法解析提示字符串.使用Haskell语法.
这是什么意思?哪一行导致问题(来自以下脚本)?
let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set prompt \"" ++ cwd ++ fill ++ " \""); }
:def doprompt (\_ -> cur ">")
:def mycd (\dir -> System.Directory.setCurrentDirectory dir >> cur ">")
:doprompt
Run Code Online (Sandbox Code Playgroud)
此外,如果我将ghci.conf文件重命名为某个随机名称,然后启动ghci.exe,则会加载这些模块:

正如我之前所说的,它加载的模块少的数量,这意味着与ghci.conf,ghci.exe做了成功,但在某些时候会失败.如何解决?
在Haskell中是否有一个命令显示(或作为列表)所有已在GHCi中加载/定义的用户定义函数?谢谢
问题1
嗨,如果在WinGHCi中我故意做以下错误的代码:
3 4
Run Code Online (Sandbox Code Playgroud)
然后我收到的错误消息是
<interactive>:1:1:
No instance for (Num (a0 -> t0))
arising from the literal `3'
Possible fix: add an instance declaration for (Num (a0 -> t0))
In the expression: 3
In the expression: 3 4
In an equation for `it': it = 3 4
Run Code Online (Sandbox Code Playgroud)
究竟是什么No instance for (Num (a0 -> t0))意思?
问题2
为什么以下代码:
(+) 2 3 4
<interactive>:1:7:
No instance for (Num (a0 -> t0))
arising from the literal `3'
Possible fix: add an instance …Run Code Online (Sandbox Code Playgroud) 假设我有两个模块NecessaryModule1和NecessaryModule2(如后Haskell中所述:在当前目录路径中加载所有文件.然后我注意到在WinGHCi和GHCi中,如果我这样做:
> :load NecessaryModule1
[1 of 1] Compiling NecessaryModule1 ( NecessaryModule1.hs, interpreted )
Ok, modules loaded: NecessaryModule1.
> addNumber1 2 3
5
> :load NecessaryModule2
[1 of 1] Compiling NecessaryModule2 ( NecessaryModule2.hs, interpreted )
Ok, modules loaded: NecessaryModule2.
> addNumber1 2 3
<interactive>:1:1: Not in scope: `addNumber1'
Run Code Online (Sandbox Code Playgroud)
即加载NecessaryModule2消除了NecessaryModule1的所有功能.
那么这是否意味着我可以同时加载NecessaryModule1和NecessaryModule2的唯一方法是使用第三个文件(导入NecessaryModule1和NecessaryModule2)然后加载第三个文件?(例如,参见Haskell中的 test.hs :在当前目录路径中加载所有文件)谢谢.
[对geekosaur的反应]
嗨,所以如果我已经完成:load NecessaryModule1,然后我想在MyMod.hs中加载模块:
--MyMod.hs
module MyMod where
import Data.List
f x = sort x
Run Code Online (Sandbox Code Playgroud)
那怎么办呢?在Haskell中:WinGHCi中的卸载模块 Riccardo解释说:module假设模块已经加载.那么这是否意味着实现加载多个自定义模块的唯一方法是通过单次调用:load函数来加载它们?谢谢.
我在Windows上尝试使用GHCi中的Haskell.在我正在阅读的教程中,函数名称包含在反引号中:x `mod` 7.但是,我不能在GHCi中输入字符.
反引号字符的ASCII值为096,但GHCI不允许Alt+ 数字插入任何字符.复制/粘贴也不起作用.我该怎么办?
如何清除WinGhci(Haskell的Windows IDE之一)命令提示符和所有当前"会话"值?
我是Haskell的新手(以及一般的函数式编程),并想知道如何使用cons(:)运算符访问我添加到列表中的新元素?
例如,使用WinGHCi我创建一个新列表并访问第一个元素:
ghci> let a = [1,2,3]
ghci> a!!0
1
Run Code Online (Sandbox Code Playgroud)
提示返回1,第一个元素的值,酷.现在我将新值附加到列表的前面并尝试访问它:
ghci> 5:a
[5,1,2,3]
ghci> a!!0
1
Run Code Online (Sandbox Code Playgroud)
看起来列表项不会被重新编入索引.我尝试使用负面索引来工作和其他类似的东西,但编译器似乎没有批准.我正在阅读的教程只是跳过它,我找不到任何在线使用的东西.如何从列表中获取值"5"?
如果这是一个非常基本的问题,感谢您的帮助和抱歉.
所以,我试图在WinGHCi中"设置提示"λ>"",它崩溃了,之后就不会重新开始了(Not Responding).我重新安装了Haskell平台,它仍然无法启动(无响应).GHCi在cmd中工作.我在第一次取消/重新安装WinGHCi之前搜索了剩余的.conf文件,这可能会导致崩溃,但找不到任何文件.我会感激任何帮助,提前谢谢.
基本问题与GHCI解释器的引号一起出现。是的,我知道应该使用代码将其编译为可执行文件,但是,由于我是Haskell的初学者,因此GHCI对于学习一些Haskell似乎是完美的。
当我使用重计算负载算法时,有时会遇到如下消息:
Prelude Data.List> foldl' (+) 0 [1..2*10^8]
20000000100000000
it :: (Num b, Enum b) => b
(8.35 secs, 17,600,063,056 bytes)
Run Code Online (Sandbox Code Playgroud)
同时,我仅实际安装了8 GB RAM。
如果内存使用量超过某个限制(我不确定那是多少,但是建议使用所有可用内存),则会引发堆栈溢出异常,如下图所示:
Prelude> foldl (+) 0 [1..5 * 10^7]
*** Exception: stack overflow
Run Code Online (Sandbox Code Playgroud)
但是,当我的RAM总计为8 GB时,该程序如何使用大于16 GB的内存,而又不会引发堆栈溢出异常?
我正在尝试使用Haskell Platform 2011.2.0.1在Haskell中编译一个简单的hello world程序.如果我在WinGHCi中加载代码,并使用GUI进行编译,则会创建.exe.然后我可以从Cygwin运行.exe.
但是如果我尝试在Cygwin中编译代码(使用ghc --make),链接器就会失败.但是,如果我从Windows cmd提示符编译,那么编译+链接器工作正常.
我需要将任何其他环境变量导入Cygwin,以使编译+链接器工作吗?我已经把下面迪尔斯在我的Cygwin的路径:2011.2.0.1/lib/extralibs/bin,2011.2.0.1/bin(这些是仅有的两个有效的Haskell相关的条目,我可以在Windows环境变量看).
我还注意到Windows环境变量中有几个无效项(这看起来像是Haskell安装中的一个错误):
C/ProgramFiles/Haskell/bin- 这个目录不存在,因为我在D盘中安装了Haskell.userxxx/ApplicationData/cabal/bin- 此目录不存在.我试图在HaskellPlatform中提交错误报告,但我没有权限这样做.