单行模式匹配的语法是什么?

时间:2011-12-05 15:30:31

标签: haskell syntax pattern-matching

word 0 = "Zero"
word 1 = "One"
word 2 = "Two"

我如何将像这样的模式匹配函数压缩成一行?

我尝试了word 0 = "Zero" word 1 = "One" word 2 = "Two",但这没效果。

4 个答案:

答案 0 :(得分:30)

使用分号:

word 0 = "Zero"; word 1 = "One"; word 2 = "Two"

答案 1 :(得分:30)

在一行中编写函数是一个奇怪的要求。无论如何,case也可以在那里提供帮助。

word x = case x of {0 -> "Zero"; 1 -> "One"; 2 -> "Two"}

答案 2 :(得分:10)

您可以使用以下内容:

word = (!!) ["Zero", "One", "Two"]

我不知道它是否比模式匹配慢。

答案 3 :(得分:3)

另一种可能性:

data Words = Zero | One | Two deriving (Show, Enum)

word = show . (toEnum :: Int -> Words)

或者,如果您希望它使用Int以外的其他类型,

word = show . ((toEnum.fromIntegral) :: Integral a => a->Words)