25
Как я могу иметь несколько ограничений класса, так что если A
является Eq
и B
является Num
, я мог бы сказать ниHaskell типа подписи с множественными ограничениями класса
f :: Eq a => a -> b`
или
f :: Num b => a -> b
Так , как я могу иметь Eq a =>
и Num b =>
в то же время?
f :: Eq a => Num b => a -> b
,f :: Eq a -> Num b => a -> b
иf :: Eq a, Num b => a -> b
не делать то, что я хотел.
Aha! Спасибо. Эти скобки с запятой вызывают какой-то более высокий уровень кортежа, или это еще одно значение круглых скобок? –
@ На самом деле они делают (сейчас), хотя вы, вероятно, не должны больше беспокоиться о таких вещах. Типы Normall Haskell имеют * kind * (тип типа) '*', поэтому тип кортежа имеет вид '* -> * -> *'. В последних версиях GHC существует новый вид 'Constraint', такой, что' Eq :: * -> Constraint', и кортежи были продвинуты в этот новый вид. –