哈斯克尔:为什么这不正确?我在另一个数据声明中放入了一个数据类型作为类型构造函数



问题:

制作代表名词-动词-名词句子的三元组的所有组合。为了做到这一点,我决定尝试让这个问题更容易阅读,因为verbComb的未来看起来并不"干净",通过处理数据类型并遇到了这个问题。请帮忙!

我的代码:

type Letter = Char
data Word = Noun (Letter, Letter, Letter)| Verb (Letter, Letter,    Letter)
  deriving (Ord, Eq, Show)
data Sentence = (Word, Word, Word)
  deriving (Show)
stops = "pbtdkg"
vowels = "aeiou"
vowelComb :: String -> String -> [(Char, Char, Char)]
vowelComb s v  = combine s v s ++ combine (reverse s) v s ++ combine s v (reverse s)
  where combine f s t = [ (x,y,z) | x <- f, y <- s, z <- t, x == 'p']
verbComb :: Word -> Word -> Sentence
verbComb = undefined


错误:

chp10.hs:88:21: Ambiguous occurrence ‘Word’ It could refer to either ‘Chp10.Word’, defined at chp10.hs:75:1 or ‘Prelude.Word’, imported from ‘Prelude’ at chp10.hs:28:8-12 (and originally defined in ‘GHC.Types’) Failed, modules loaded: none.

如错误所示,称为Word的类型与已在范围中的名为Word的类型冲突,该类型是隐式包含的Prelude模块的一部分。要使用您的类型,您需要将其完全限定为Chp10.Word,或者隐藏另一个冲突类型:

import Prelude hiding (Word)

最新更新