当前位置: 首页 > 知识库问答 >
问题:

是否有默认的多态单元类型haskell

马阳曦
2023-03-14

在Haskell中有一个默认的单位类型,即()。我正在寻找一个多态的(最好是在Hackage中),例如:

data PUT a = PUT

或者可能是多态零型:

data PZT a = PZT (PZT a)

所以,是的,我可以自己写一个,通过上面的陈述。我想在hackage找一个。

我之所以需要它,是因为我有一个具有多个类型参数的类,其中包含一个不使用其中一个参数的函数:

class MyClass a b where
  someFunction :: a
  -- and some other functions

使用此函数“someFunction”时,GHC找不到正确的实例,因此我更改了定义

class MyClass a b where
  someFunction :: (PUT b) -> a

现在,当我调用某物函数时,我可以使用(PUT::某物类型)作为它的第一个参数,Haskell可以派生出我所指的实例。每次我使用这个技巧时,我都会编写一个新的多态单元类型(它只是一行代码),这给了我在组合不同库时的一些额外工作(因为最好是,我在任何地方都使用相同的构造函数)。我肯定其他人遇到了这个问题,所以也许他们中的一个人在hackage(ghc的数据包管理器)中找到了解决方案?我想进口它。我是在寻找错误的东西,还是它不存在于黑客时代?

共有1个答案

秦才良
2023-03-14

我想你要找的通常是代理。自base-4.7以来,它在数据中可用。代理

类似的东西是Const,它在base中可用,因为它比Proxy长,例如,您可以使用Const()

 类似资料:
  • 问题内容: 如果我写这样的话 哪种类型带有“ 18”?是 int 还是 byte ?还是还没有类型? 它不能是int,因为这样是正确的: 这是不正确的: 编辑:我想我在工作分配转换的规范中找到了正确的部分: 常量的编译时缩小意味着代码如下: 字节theAnswer = 42; 被允许。如果不进行缩小,则整数文字42具有int类型的事实意味着将需要强制转换为字节: 字节theAnswer =(字节)

  • 所以,我一直在读C++标准,找到了[defns.Undefined](3.27,在我正在读的C++17草案中,请注意,当我在这里引用C++17时,我在其他标准中发现了类似的措辞)--这是未定义行为的定义。我注意到这样的措辞(强调我的): 注意:当本国际标准省略任何行为的明确定义时,或者当程序使用错误的构造或错误的数据时,可能会出现未定义的行为 现在,想想看,这有点道理。这有点像是说,如果标准没有给

  • 假设您有一些注释: 在一些相关的代码中,比如注释处理器,您需要注释字段的默认值,而不需要访问用注释的类。当然你可以这么做 在处理器类中,然后在中更改以下内容: (是注释处理器的类名)。虽然这对s很好,但是当类型是时,中的更改会失败。对于其他值,它可能也会失败,但是是我的用例的一部分,因此如果这不起作用,其他类型是否起作用也无关紧要。 当然,现在解决这个问题的最简单方法是分别在和中指定默认值。但每个

  • 问题内容: 当未设置相同名称的环境变量时,是否可以确保将GOMAXPROCS设置为1? 此代码显示值: 并像这样运行它: 显示在这种情况下为1,但我在这里寻找一些确认。 问题答案: UPDATE 2018: 默认情况下,Go程序在将GOMAXPROCS设置为可用内核数的情况下运行;在以前的版本中,它默认为1。 从Go 1.5开始,默认值为核心数。如果您在较新的Go版本中对此不满意,则只需要显式设置

  • 问题内容: 根据我的理解和JPA批注进行提取。我希望将它们延迟加载到我的应用程序中,或者至少提示它(这是hibernate默认值)。我已经开始添加注释 例如 代替 这既乏味又容易出错。有什么方法可以在应用程序级别执行此操作吗?在persistence.xml中? 问题答案: 迄今为止,我选择让Hibernate在通过注释进行映射方面遵循JPA规范,仅仅是因为我没有收到任何使其可配置的功能请求,这令

  • 问题内容: 能否解释一下为什么Spring为下面所示的bean配置创建两个对象,因为默认情况下spring的默认作用域是singleton? Spring配置在这里: 问题答案: Spring的默认范围是单例。仅仅是你对成为单身人士的含义的想法与Spring如何定义单身人士不匹配。 如果你告诉Spring制作两个具有不同ID和相同类的独立bean,那么你将获得两个独立bean,每个bean具有单例