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

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

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

Например:

class Monad m <= MonadTell w m | m -> w where
  tell :: w -> m Unit
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Канал в 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

Другой способ сформулировать это для этих примеров — сказать, что тип a определяет тип rep для Generic, а t определяет a для Newtype. Такое описание также как бы иллюстрирует, как функциональные зависимости могут использоваться в качестве функций уровня типа.

gb. 30.05.2019 01:25

Другие вопросы по теме