Что означает символ канала (|), когда он является частью сигнатуры типа purescript? - PullRequest
0 голосов
/ 29 мая 2019

Я не смог понять это точно, прочитав доступные документы .

В разделе записей документации по типу это, похоже, связано с полиморфизмом строк, но я не понимаю, как оно обычно используется. Что это означает, когда есть сигнатура типа с символом |?

Например:

class Monad m <= MonadTell w m | m -> w where
  tell :: w -> m Unit

1 Ответ

3 голосов
/ 29 мая 2019

Канал в PureScript не используется "в общем".Есть несколько вариантов его использования в зависимости от контекста.Один, как вы упомянули, предназначен для комбинаций строк типов.Другой - для функций защиты.

Конкретный синтаксис, который вы цитируете, называется «функциональная зависимость».Это свойство класса многопараметрического типа, и оно указывает, что некоторые переменные должны быть однозначно определены другими.

В данном конкретном случае синтаксис означает « для каждого m, может быть только один w».Или, проще говоря, данный m не может быть MonadTell для нескольких разных w с.

Функциональные зависимости обнаруживаются во многих других местах.Например:

-- For every type `a` there is only one generic representation `rep`
class Generic a rep | a -> rep where

-- Every newtype `t` wraps only one unique inner type `a`
class Newtype t a | t -> a where
...