2016-03-16 110 views
0

我有一個這樣的模塊:哈斯克爾 - 模塊內部模塊

module Model where 

import FlowType 
    . 
    . 
    . 

我使用FlowTypeModel的身體,但我想也隨着型號的功能導出流動型太。我發現一個模塊的語法如下:

module Import 
    (module Import 
) where 

import Foundation as Import 
    . 
    . 
    . 

這是什麼module Import (module Import) where ??? 我怎樣才能在我的Model模塊中做同樣的事情(並導出自己的功能)?

+1

模塊X(..)中的'..'是導出列表。如果您不指定它,則默認導出整個模塊。您可以明確地從模塊中重新導出整個模塊 - 事實上,您也可以在導入中重命名模塊是無關緊要的。 '模塊導入(模塊導入,模塊基礎),其中導入基礎'完成相同的事情。然而,一個常見的習慣用法是用一個限定符導入許多模塊,然後將它們一次全部重新導出 - 就像您在後面的例子中看到的那樣。 – user2407038

回答

4

假設模塊Foundation輸出名稱foobar

首先,import Foundation as Import使這些名稱在Import.fooImport.bar中可用,位於當前正在定義的模塊內。

然後module語句也會導出這些名稱。而不必寫

module Import (foo, bar) where 

您可以通過名稱Import與問題的語法出口接近的一切。該示例有點令人困惑,因爲它使用Import作爲Foundation的內部名稱和當前模塊的名稱。這將是更明顯寫成

module Import (module Foundation) where 

import Foundation 
    . 
    . 
    . 

在你的情況,你會寫

module Model (module FlowType) where 
import FlowType 

輸出從您的模塊從FlowType進口的一切。

+0

'module Model(import FlowType)'如何加上模塊本身的功能? – FtheBuilder

+1

您可以在導出列表中使用'module Model'。 '模塊模型(模塊FlowType,模塊模型)其中'。 – chepner

+0

如果我想過濾來自Model和FlowType的一些函數,它會是怎樣的? – FtheBuilder