gpt4 book ai didi

haskell - 如果代码包含模块定义,为什么我不能用 GHC 编译?

转载 作者:行者123 更新时间:2023-12-03 14:55:06 26 4
gpt4 key购买 nike

我正在尝试用 ghc 编译一个非常小的 haskell 代码:

module Comma where

import System.IO

main = do
contents <- getContents
putStr (comma contents)

comma input =
let allLines = lines input
addcomma [x] = x
addcomma (x:xs) = x ++ "," ++ (addcomma xs)
result = addcomma allLines
in result

我用来编译的命令是:

ghc --make Comma.hs



我得到了这个答案:

[1 of 1] Compiling Comma ( Comma.hs, Comma.o )



没有生成文件,也没有警告或错误消息。

如果我从代码中注释“模块逗号位置”行,它会正确编译:

[1 of 1] Compiling Main ( Comma.hs, Comma.o ) Linking Comma ...



我不明白发生了什么。
我正在使用 ghc 7,4,1
(Glasgow Haskell 编译器,版本 7.4.1,由 GHC 版本 7.4.1 启动的第 2 阶段)
和ubuntu linux。

如果有人能说出为什么不使用模块定义编译,我将不胜感激

最佳答案

GHC编译函数Main.main成为可执行文件的入口点。省略模块声明时,Module Main where为您隐式插入。

但是,当您明确将其命名为 Main 以外的其他名称时ghc 没有找到入口点。

我通常的工作流程是使用 ghci (或 ghci + emacs)代替这些片段,让您完全绕过这个问题。或者,您可以使用 -main-is Comma 进行编译明确告诉 ghc 使用 Comma 模块。

关于haskell - 如果代码包含模块定义,为什么我不能用 GHC 编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17888158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com