我无法通过阅读可用的docs确切地了解这一点。
在Type文档的记录部分中,它似乎与行多态性有关,但我不理解它的一般用法。当带有|
符号的类型签名是什么意思?
例如:
class Monad m <= MonadTell w m | m -> w where
tell :: w -> m Unit
答案 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