Haskell, как определить модуль? - PullRequest
0 голосов
/ 13 января 2019

Я написал очень простую программу на Хаскеле, которая занимает два списка и сливается. Но я не понимаю, как определить модуль в Haskell.

Здесь мой код

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)

Не знаю, что я должен после «где» писать. Только списки операций, например, голова, хвост и т. Д. Или?

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 13 января 2019

Отчет Haskell '10 показывает пример программы:

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(<b>merge</b>) where

merge::[a] -> [a] -> [a]
merge xs [] = xs
merge [] ys = ys
merge (x:xs) (y:ys) = x:y:(merge xs ys)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...