Haskell中的正则表达式 - 了解多参数类型类签名

时间:2014-04-27 16:05:05

标签: regex haskell

我很难弄清楚如何使用Text.Regex包。下面的签名是什么意思?

class RegexOptions regex compOpt execOpt 
  | regex->compOpt execOpt, compOpt->regex execOpt, execOpt->regex compOpt

据我所知,RegexOptions有三个类型参数,对于每个参数,其他两个允许编译器确定其类型,但是如何? regex compOptexecOpt上有哪些类型或限制?

附带问题。这个表达式的类型是什么?

makeRegexOpts (defaultCompOpt { caseSensitive = False }) defaultExecOpt

1 个答案:

答案 0 :(得分:1)

  

并且对于它们中的每一个,其他两个允许编译器确定其类型

不完全。每个都可以用来推断其他两个,这就是这个fundep所说的。

这是如何运作的?好吧,magic!不会。编译器只允许您声明一个出现在其中一个参数上的任何特定类型的单个实例。然后,当它需要一个RegexOptions实例并且已经推导出任何一个类型参数时,它可以只查看该实例以获取其他参数。