【问题标题】:Haskell, How to define Module?Haskell,如何定义模块?
【发布时间】:2019-01-12 21:46:36
【问题描述】:

我在 Haskell 中编写了一个非常简单的程序,它接受两个列表并将其合并。 但是我不明白如何在 Haskell 中定义 Module。

Hier 是我的代码

module Merge(Merge (empty, list)merge) where ....
merge::[a] -> [a] -> [a]
merge xs [] = xs
merge [] ys = ys
merge (x:xs) (y:ys) = x:y:(merge xs ys)

我不知道,我应该在“哪里”之后写什么。 仅列出操作,例如头尾等,还是?

谁能帮助我?

【问题讨论】:

  • where之后是模块的代码。即模块的功能和数据类型。如果您需要导入“where”之后但在其余代码之前的任何内容。这是语法问题还是应该写什么函数?
  • @puhlen Ich 只有这个功能,我需要这个功能的模块。这部分正确吗? module Merge(Merge (empty, list)merge)
  • @Haskell:但这里只有merge 函数,所以module Merge(merge) where

标签: haskell module


【解决方案1】:

Haskell '10 report 显示了一个示例程序:

module Main where  
  import A  
  import B  
  main = A.f >> B.f  

module A where  
  f = ...  

module B where  
  f = ...

相当于下面的单模块程序:

module Main where  
  main = af >> bf  

  af = ...  

  bf = ...

where之后写导入语句、类声明、函数声明等。

还可以在括号之间写出导出列表。这些导出是函数、类、类型、构造函数等。

使用where 进入范围并不特定于模块。当我们定义 class 的函数或 instance 中的函数定义时,也会发生同样的情况。

在你的代码中,你只定义了一个merge函数,并没有导入任何东西,所以代码文件很可能应该是这样的:

module Merge(merge) where

merge::[a] -> [a] -> [a]
merge xs [] = xs
merge [] ys = ys
merge (x:xs) (y:ys) = x:y:(merge xs ys)

【讨论】:

    猜你喜欢
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2020-03-15
    • 1970-01-01
    相关资源
    最近更新 更多