haskell – 什么是FlexibleContexts扩展是有益的?你能用简单的例子解释一下吗?

我正在尝试通过搜索可以解释为只是凡人的网页(例如像我这样阅读LYHFGG的人),但是我没有找到任何这样的资源,来了解FlexibleContexts扩展正在做什么.

因此,我请专家讨论这个话题:有人可以解释这个扩展是什么,为什么存在,并给出一个或两个简单的例子,怎样和为什么要使用它?

此外,如果我正在阅读别人的代码which使用此扩展名,那么我应该知道扩展名,以便了解使用此扩展编写的代码?

最佳答案
没有FlexibleContexts函数定义的所有类型约束都必须有类型变量.例如:

add :: Num a => a -> a
add = (+)

其中a是类型变量.启用FlexibleContexts后,您可以在类型类型中包含任何类型.

intAdd :: Num Int => Int -> Int
intAdd = (+)

这个例子是非常有创意的,但它是我能想到的最简单的. FlexibleContexts通常仅用于MultiParamTypeClasses.这是一个例子:

class Shower a b where
  myShow :: a -> b

doSomething :: Shower a String => a -> String
doSomething = myShow

在这里你可以看到我们说我们只想要一个淋浴一个字符串.没有FlexibleContexts String将不得不是一个类型变量而不是具体的类型.

转载注明原文:haskell – 什么是FlexibleContexts扩展是有益的?你能用简单的例子解释一下吗? - 代码日志