Значение Тильды в типах Haskell (равенство типов)
я возился с fix
функция, и я столкнулся с этим:
λ let fix f = let x = f x in x
λ fix (+)
<interactive>:15:5:
Occurs check: cannot construct the infinite type: t ~ t -> t
Expected type: t -> t
Actual type: t -> t -> t
Relevant bindings include it :: t (bound at <interactive>:15:1)
In the first argument of ‘fix’, namely ‘(+)’
In the expression: fix (+)
Я прекрасно знаю, почему эта ошибка происходит, но я заметил забавную подпись типа там: t ~ t -> t
. Что означает этот тип? Что означает Тильда в сигнатурах типов в haskell? Где они используются?
1 ответов
Тильда (~
) в этой ошибке означает равенство типа. Он говорит вам, что не может вывести t
на t -> t
. Символ также используется для неопровержимые шаблоны, но это совершенно другой контекст.