soma :: [Int] -> Int
soma [] = 0
soma (h:t) = h + soma t
main :: IO ()
main = do
putStrLn "Enter a list of numbers in Haskell syntax (e.g., [1,2,3,4,5]):"
numbers <- readLn
putStrLn "The sum is:"
print (some numbers)
型 现在,你可以用ghc编译这个程序,并运行得到的可执行文件。它看起来像这样:
~/src/overflow$ ghc Programa
[1 of 2] Compiling Main ( Programa.hs, Programa.o )
[2 of 2] Linking Programa
~/src/overflow$ ./Programa
Enter a list of numbers in Haskell syntax (e.g., [1,2,3,4,5]):
[1,2,3,4,5] <--- I entered this part
The sum is:
15
~/src/overflow$
1条答案
按热度按时间bxjv4tth1#
尝试创建一个名为
Exemplo.hs
的Haskell源文件。名称的拼写应该完全相同,以“E”开头。文件的第一行应该是一个module
语句,该语句使用与源文件名称相同的模块名称:字符串
现在,在交互式GHC提示符(通过运行
ghci
获得)中,您可以加载此文件(使用:load Exemplo
)并测试您的函数。使用命令行,它看起来像这样:型
如果你想创建一个编译后的可执行文件,你必须创建一个定义了
main
函数的源文件,这个函数将决定程序的功能。你可以给源文件起任何你喜欢的名字,但是你应该NOT包括一个module
语句。例如,创建一个包含以下行的文件Programa.hs
:型
现在,你可以用
ghc
编译这个程序,并运行得到的可执行文件。它看起来像这样:型
GHC使用模块系统,其中每个文件都是一个模块。文件可以以命名模块的
module XXX where
语句开头,也可以省略module
语句,在这种情况下假定为Main
模块。当一个模块使用import语句导入另一个模块时:型
编译器将尝试在文件
SomeModule.hs
中查找模块,因此module SomeModule where
语句中的模块名称与文件名中的模块名称匹配非常重要。模块名称必须以小写字母开头,因此这意味着应该是模块的Haskell源文件也应该以小写字母开头命名。在Exemplo.hs
中创建模块将有效,但exemplo.hs
可能不会。Main
模块比较特殊,当你编译一个文件时,(或使用GHCi加载文件),第一行包含module Main where
语句或根本不包含module
语句(因此默认为Main
模块),编译器希望它是一个独立的程序而不是一个常规模块,它会寻找一个main
函数。使用旧版本的GHC,你会得到一个神秘的错误消息,也许你指的是min
。较新版本的GHC给予一个稍微好一点的错误消息:型
所以,这意味着:
1.如果你想创建一个Haskell源文件,它不是一个独立的程序,而是包含你想与GHCi交互测试的函数,或者编译成一个可以被其他模块
import
艾德编译的模块,那么你应该给它命名,而不是Main.hs
,你应该确保文件名的第一个字母是Main.hs
,你应该在顶部包含一个与文件名MyModule.hs
匹配的模块module MyModule where
语句。1.如果你想创建一个独立的Haskell源文件,你可以给它起任何名字,带或不带一个小写字母。你应该省略
module
语句,你必须定义一个main
函数来定义独立程序在运行时的实际操作。