Можно ли использовать сопоставление patten с данными каррирования? Предположим, что следующий код:Haskell: использование соответствия patten с данными каррирования
data Bind = Echo String | Sum Int Int
getOperation (Echo x) = "Echo"
getOperation (Sum x y) = "Sum"
main = getOperation (Sum 1)
Это терпит неудачу, потому что Sum 1
имеет тип Int -> Bind
и getOperation
имеет тип Bind -> String
.
Мое упоминание состоит в том, чтобы получить строку, которая идентифицирует используемый конструктор данных, даже если данные находятся в карри. Что-то вроде этого поддельного кода:
getOperation (Echo x) = "Echo"
getOperation (Echo) = "Echo" -- Pattern matching for curried data
getOperation (Sum x y) = "Sum"
getOperation (Sum x) = "Sum" -- Pattern matching for curried data
, как вы сами сказали, '' Echo' является String -> Bind' - так прямо сейчас это функция, принимающая «String» и возвращающая «Bind», и, к сожалению, вы не можете использовать функции сопоставления шаблонов (это может быть '\ _-> Sum 0 0', а также для всех' getOperation' знает на этом этапе) – Carsten