当部分纯脚本类型签名时,竖线字符(|)是什么意思?

时间:2019-05-29 06:03:18

标签: purescript

我无法通过阅读可用的docs确切地了解这一点。

在Type文档的记录部分中,它似乎与行多态性有关,但我不理解它的一般用法。当带有|符号的类型签名是什么意思?

例如:

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

1 个答案:

答案 0 :(得分:2)

“一般”不使用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