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

声明后自动派生实例

易淳
2023-03-14

在Haskell中,当定义一个数据类型时,您可以选择自动派生一些实例,但我是否可以推迟自动派生,甚至可以将其放到另一个库中?

这里有一个例子:

在Haskell自动派生是一个实时节省!

module MoneyModule where

data Money = Money Int
  deriving Show
module ExternalModule where

instance Read Money where
  read = error "Can't this be done automatically instead?"
  • 最好用丢失的实例修补实际MoneyModule中的问题。
  • 认为有孤立实例是不好的。实例声明最好放在定义类型类或数据类型的模块中。

在我的例子中,我不能遵循最佳实践,因为type类与数据类型无关。我怀疑type class模块和data type模块是否希望保存实例,因此我创建了第三个库,因为在某些应用程序中,您需要实例声明。

共有1个答案

戚浩淼
2023-03-14

GHC具有StandaloneDeriving扩展,通过该扩展,您可以

{-# LANGUAGE StandaloneDeriving #-}
import MoneyModule

deriving instance Read Money

派生许多类的实例。

 类似资料:
  • 问题内容: 对我的头衔表示歉意,我无法正确表达问题。 我已经看到有两种实现方式。首先通过表示您的类已实现来完成。第二个任务是让您自己声明完成任务。 为什么在第一种选择中,您可以简单地将其作为参数,而在第二种选择中,则必须麻烦自己创建对象? 首先: 第二: 问题答案: 在第一种方法中, 整个Activity类都 实现了该接口。您可以将每个View的设置 为此 ,并通过一种方法接收所有click事件,

  • 本文向大家介绍CISBitmap派生的VC++位图透明类实例,包括了CISBitmap派生的VC++位图透明类实例的使用技巧和注意事项,需要的朋友参考一下 本文所述为一个由CISBitmap派生的VC++位图透明类,可以方便实现BMP图像的透明处理,主要包含两个文件,使用时主需要将其引入到你的C++工程中即可,具体的类代码如下: CISBitmap.cpp文件代码如下: CISBitmap.h文件

  • 我正在考虑将Auth0用于我的API和web应用程序,并进行查询。生成Jwt令牌时,我希望包含一些仅存在于我的用户数据库中的自定义用户声明。这是可能的,还是所有声明都需要作为Auth0中的预定义属性存在。 我有自己的用户数据库,因为我需要在那里存储一些动态和复杂的用户权限。我意识到一个选择是不将这些权限存储在令牌中,我可以有一个单独的api来获取它们,但是为了性能和简单性,我宁愿将它们包装到Jwt

  • 假设我们有一个typeclass。使用将允许我们克隆一个数据类型,然后通过语言扩展自动派生实例(请参见如何编写可派生类?以及使用相同的内部表示和最小的样板处理多个类型?)。 问题:是否可以让ghc自动派生和,但在派生时使用我们自己指定的实现? 例如,以下代码(其中=,=,=)不能按预期工作: 我期望/想要的是在派生时调用的实例。 显然,以下程序可以工作,但它需要为显式实例化: 然后ghc抱怨: 奇

  • C++ 中的继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产。 继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。 在C++中, 派生( Derive )和继承是一个概念,只是站的角度不同。继承是儿子接收父亲的产业,派生是父亲把产业传承给儿子。

  • 问题内容: 我想向将在运行时生成的对象添加一些功能。但是,该对象的接口非常大(并且不在我的控制之下)。我想将对象包装在自己的类中,该类添加了我想要的功能并将标准接口功能委托给原始对象- 在Java中有任何方法可以执行此操作,而无需为每个对象创建一行复制粘贴委托方法接口中的方法? 我要避免的是: 我更喜欢: 问题答案: 听起来您需要动态代理并仅拦截要覆盖的方法。 动态代理类是实现在运行时指定的接口列