我正在使用函数
createTypeBoard :: (Int, Int) -> CellType -> Board
使用这些类型
newtype Board = Board [(Cell, CellType)] deriving(Eq)
data CellType = Mine
| Flag
| Void
| Enumerated Int
| Undiscovered
deriving Eq
type Cell = (Int, Int)
createTypeBoard(2,2)我的应该是:Board [[((1,1),X),((1,2 ,, X),((2,1),X),((2,2 ),X)]
(X是Mine的演出实例)
我的想法是使用zip:
createTypeBoars (a, b) c = zip (createCells (a, b)) [c]
但我不断收到错误消息
• Couldn't match expected type ‘Board’
with actual type ‘[(Cell, CellType)]’
• In the expression: zip (createCells (a, b)) [Flag]
In an equation for ‘createTypeBoard’:
createTypeBoard (a, b) Flag = zip (createCells (a, b)) [Flag]
板子基本上是[(Cell,CellType)],所以我真的不明白问题出在哪里:(
答案 0 :(得分:2)
您使用Board
声明了newtype
,但是您试图像使用type
声明一样使用它。修复它的两种选择:
board
:type Board = [(Cell, CellType)]
Board
中的createTypeBoard
数据构造函数,如下所示:createTypeBoard (a, b) c = Board $ zip (createCells (a, b)) [c]
有关type
和newtype
之间的差异(可能会影响您决定采用哪种修补程序的决定)的更多信息,请参见Haskell type vs. newtype with respect to type safety和/或The difference between type and newtype in Haskell。 / p>