如何在Maybe和Either上推广默认设置?

约翰·沃克

在Haskell中,如果我有两个这样的功能:

defEither ∷   Either l r → r → r
defEither  eith defVal = either (const defVal) id eith

defMaybe ∷   Maybe a → a → a
defMaybe m d = fromMaybe d m

如何编写类型类(或具有类似效果的类型),以便可以在Either和Maybe上推广“默认”的概念?

就像是

class Defaultable ???? where
  def ∷  a b → b → b
约翰·沃克

原来,围绕为Either创建实例的语法使我感到困惑。

这是我完成的:

class Defaultable a where
  def ∷  a b → b → b

instance Defaultable (Either m) where
  def e d = either (const d) id e

instance Defaultable Maybe where
   def m d = fromMaybe d m

和一些测试

def (Just 1) 2
>> 1

def Nothing 2
>> 2

def (Right 2) 5
>> 2

def (Left 3) 5
>> 5

def (Left "Arrghh") 5
>> 5

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何设置默认设置

如何在istio kubernetes集群中拒绝默认设置但允许HTTP和TCP通信?

如何在Django和django-jsonfield中将JSONField的默认设置为空列表?

如何在 19.04 中恢复无人值守升级默认设置和 conf 文件?

如何在日期输入中默认设置开始日期和结束日期

如何在angular 4.0中默认设置单选按钮?

如何在Vim中默认设置行号?

如何在sudoers中覆盖rootpw的默认设置

如何在Featherlight中覆盖默认设置?

如何在R中还原图表的默认设置

如何在 Android 中默认设置浅色主题?

如何使用Swift默认设置UILabel字体和大小

如何在Spring Boot中使用@ComponentScan从jar和类似于默认设置的通配符加载类?

如何设置htop的默认设置?

想了解LVM和默认设置

如何在android中更新条带默认设置客户默认源

如何使“黑白”成为默认设置?

如何更改访客会话的默认设置

如何配置RStudio的默认设置?

如何从默认设置更改Kubuntu背景?

如何从用户控件访问默认设置?

如何更改 Ubuntu 的默认设置?

如何在Gradle中将包装设置为pom而不是默认设置为jar

如何在Roblox中将相机设置回默认设置?

如何在Android叠加层(强制门户模式)中设置默认设置

如何在NicEdit中设置要在新窗口中打开的链接的默认设置

如何在浓缩咖啡测试中将我的应用设置为默认设置?

如何在Mac上将Python3.9设置为python3的默认设置?

如何在Ubuntu 16.04上将HDMI声音输出设置为默认设置