Какой синтаксис для однострочного сопоставления шаблонов? word 0 = "Zero" word 1 = "One" word 2 = "Two" Как бы я конденсировал функцию сопоставления с шаблоном, подобную этой, в одну строку? Я пробовал word 0 = "Zero" word 1 = "One" word 2 = "Two", но это не сработало. Ответ 1 Используйте точки с запятой: word 0 = "Zero"; word 1 = "One"; word 2 = "Two" Ответ 2 Это странное требование написать функцию в одной строке. В любом случае, case тоже может быть полезен. word x = case x of {0 -> "Zero"; 1 -> "One"; 2 -> "Two"} Ответ 3 Вы можете использовать что-то вроде этого: word = (!!) ["Zero", "One", "Two"] Я не знаю, будет ли это медленнее, чем сопоставление шаблонов. Ответ 4 Другая возможность: data Words = Zero | One | Two deriving (Show, Enum) word = show . (toEnum :: Int -> Words) или, если вы хотите, чтобы он работал с типами, отличными от Int, word = show . ((toEnum.fromIntegral) :: Integral a => a->Words)
Ответ 2 Это странное требование написать функцию в одной строке. В любом случае, case тоже может быть полезен. word x = case x of {0 -> "Zero"; 1 -> "One"; 2 -> "Two"}
Ответ 3 Вы можете использовать что-то вроде этого: word = (!!) ["Zero", "One", "Two"] Я не знаю, будет ли это медленнее, чем сопоставление шаблонов.
Ответ 4 Другая возможность: data Words = Zero | One | Two deriving (Show, Enum) word = show . (toEnum :: Int -> Words) или, если вы хотите, чтобы он работал с типами, отличными от Int, word = show . ((toEnum.fromIntegral) :: Integral a => a->Words)