数据类型Haskell错误

时间:2013-01-07 01:42:22

标签: haskell-platform template-haskell haskell

我声明了一些数据类型如下:

data TX_OR_TY = TX | TY
data TX = X Int
data TY = Y Float

现在我写一些函数返回它们的数据类型:

funcTX :: TX
funcTX = X 3

funcTY :: TY
funcTY = Y 5

ordFuncTX :: TX -> Int -> Bool
ordFuncTX (X a) b = (a > b)

funcTX_TY :: TX_OR_TY
funcTX_TY = if (ordFuncTX funcTX 4) then funcTX else funcTY

函数funcTX_TY将通过将TX的值与4进行比较来返回TX_OR_TY类型,如果大于则返回TX,如果小则返回TY。但在编译时,它宣布它与 TX TX 的预期类型 TX_OR_TY 无法匹配。我该如何解决?

1 个答案:

答案 0 :(得分:5)

您的数据声明可能与您的意图不符。

TX_OR_TY只定义了两个构造函数:TX和TY。

以下数据声明定义类型 TX和TY。

你可能意味着像

data TX_OR_TY = AnX TX | AnY TY
data TX = X Int
data TY = Y Float
-- Now I write some function return their data type:

funcTX :: TX
funcTX = X 3

funcTY :: TY
funcTY = Y 5

ordFuncTX :: TX -> Int -> Bool
ordFuncTX (X a) b = (a > b)

funcTX_TY :: TX_OR_TY
funcTX_TY = if (ordFuncTX funcTX 4) then AnX funcTX else AnX funcTY

请注意,TX_OR_TY是标准前奏中Either数据类型的专用版本。要使用Either,请省略TX_OR_TY的定义并更改函数:

funcTX_TY :: Either TX TY
funcTX_TY = if (ordFuncTX funcTX 4) then Left funcTX else Right funcTY