Значение Тильды в типах 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. Символ также используется для неопровержимые шаблоны, но это совершенно другой контекст.