2015-12-31 66 views
0

我有一個這樣的導入:從其他文件哈斯克爾「進口資質」和「不在範圍:數據構造」

import qualified Bioinformatics.DNA as DNA 

看起來像這樣:

data DNA = A | C | G | T 
    deriving (Eq, Ord, Show) 

並在此功能在模塊RNA其中:

module Bioinformatics.RNA 
    (RNA 
    , fromDna 
) where 

import qualified Bioinformatics.DNA as DNA 

data RNA = A | C | G | U 
    deriving (Eq, Ord, Show) 

fromDna :: DNA.DNA -> RNA 
fromDna DNA.A = A 
fromDna DNA.C = C 
fromDna DNA.G = G 
fromDna DNA.T = U 

我收到錯誤:

/home/thibaud/code/bioinformatics/src/Bioinformatics/RNA.hs:46:9: 
    Not in scope: data constructor ‘DNA.A’ 

/home/thibaud/code/bioinformatics/src/Bioinformatics/RNA.hs:47:9: 
    Not in scope: data constructor ‘DNA.C’ 

/home/thibaud/code/bioinformatics/src/Bioinformatics/RNA.hs:48:9: 
    Not in scope: data constructor ‘DNA.G’ 

/home/thibaud/code/bioinformatics/src/Bioinformatics/RNA.hs:49:9: 
    Not in scope: data constructor ‘DNA.T’ 

你有一個想法,爲什麼? 感謝

+0

您可能不需要'數據A; ...;數據T'類型定義。值構造函數就足夠了,只要您按照下面的答案中指出的那樣導出和導入它們即可。 – chi

回答

1

使用(..)導入的數據類型的所有構造函數。

import qualified Bioinformatics.DNA as DNA (DNA(..), A, C, G, T) 

代碼擊穿

編輯:讓我們打破你的代碼一點點,因爲它不太習慣。

import qualified Bioinformatics.DNA as DNA (DNA(..), A, C, G, T) 

這已經很奇怪了。通常情況下,人們通過合格的或有選擇的方式進口商品,而不是兩者。請試試:

import qualified Bioinfomatics.DNA as DNA 

因此,讓我們保持量化並放下明確的符號列表。

現在的使用,您有:

fromDna :: DNA.DNA -> RNA 
fromDna DNA.A = A 
fromDna DNA.C = C 
fromDna DNA.G = G 
fromDna DNA.T = U 

,這個功能從DNA轉換爲RNA的要求。注意你的questino從未展示過RNA類型或構造函數 - 是否在代碼中的某些地方?您發佈的代碼中的其餘錯誤與RNA相關,請考慮以下內容:

import qualified Bioinformatics.RNA as RNA 

fromDna :: DNA.DNA -> RNA.RNA 
fromDna DNA.A = RNA.A 
fromDna DNA.C = RNA.C 
fromDna DNA.G = RNA.G 
fromDna DNA.T = RNA.U 
+0

它不與DNA的工作(..),我得到同樣的錯誤... –

+0

你確定嗎?你現在應該得到不同的錯誤,如'「不在範圍內‘A’也許你換貨的其中之一:‘DNA.A’......」'。完成之後,您可能會遇到預期類型與實際類型DNA/RNA的類型錯誤。 –

+0

我更新了我的第一篇文章,修改了導入和RNA類型的定義。 –