Каков синтаксис для сопоставления с одной строкой? - PullRequest
21 голосов
/ 05 декабря 2011
word 0 = "Zero"
word 1 = "One"
word 2 = "Two"

Как бы я сжал такую ​​функцию сопоставления с образцом, как эта, в одну строку?

Я пытался word 0 = "Zero" word 1 = "One" word 2 = "Two", но это не сработало.

Ответы [ 4 ]

30 голосов
/ 05 декабря 2011

Странное требование написать функцию в одной строке.В любом случае, case может быть полезным и там.

word x = case x of {0 -> "Zero"; 1 -> "One"; 2 -> "Two"}
30 голосов
/ 05 декабря 2011

Используйте точки с запятой:

word 0 = "Zero"; word 1 = "One"; word 2 = "Two"
10 голосов
/ 05 декабря 2011

Вы можете использовать что-то вроде этого:

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

Я не знаю, будет ли оно медленнее, чем сопоставление с образцом.

3 голосов
/ 06 декабря 2011

Другая возможность:

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

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

или, если вы хотите, чтобы он работал с типами, отличными от Int,

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