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

Seb*_*aan 8 haskell

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

data PUT a = PUT
Run Code Online (Sandbox Code Playgroud)

或者可能是多态零类型:

data PZT a = PZT (PZT a)
Run Code Online (Sandbox Code Playgroud)

所以是的,我可以通过以上任何一种陈述自己写一个.我正在寻找一个hackage.

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

class MyClass a b where
  someFunction :: a
  -- and some other functions
Run Code Online (Sandbox Code Playgroud)

当使用这个函数"someFunction"时,GHC找不到合适的实例,所以我改变了我的定义:

class MyClass a b where
  someFunction :: (PUT b) -> a
Run Code Online (Sandbox Code Playgroud)

现在当我调用someFunction时,我可以使用(PUT :: SomeType)作为它的第一个参数,而Haskell可以导出我的意思.每次我使用这个技巧时,我都会编写一个新的多态单元类型(它只是一行代码),这在组合不同的库时给了我一些额外的工作(因为我最好在各处使用相同的构造函数).我确信其他人遇到了这个问题,所以也许其中一个人提出了hackage解决方案(ghc的数据包管理器)?我想导入它.我在寻找错误的东西,还是在hackage中不存在?

Joa*_*ner 20

我认为你所寻找的通常被称为Proxy.从base-4.7开始,它在Data.Proxy中可用

类似的事情,这是基地可用,因为长于ProxyConst,例如,你可以使用Const ().

  • 还要注意表达"someFunction"类型的常用习语,而不是"代理b - > a",而是"代理b - > a"(注意大小写),以便不需要"代理"本身. (6认同)