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

用单个常量派生类

龚玄天
2023-03-14

我想派生一个具有常量和一些琐碎操作的类:

class  Zeros z where
    zero :: z
    isZero  :: Eq z =>  z -> Bool
    isZero z = zero == z
{-# LANGUAGE DeriveGeneric, DeriveAnyClass
    , GeneralizedNewtypeDeriving #-}
module Lib.DerivingExampleDerive
    where
import Data.Text
import Lib.DerivingExample
import GHC.Generics

newtype Basis1 = Basis1 Text deriving (Show, Read, Eq, Ord, Generic, Zeros)
/home/frank/Workspace8/testSome/Lib/DerivingExampleDerive.hs:26:70: warning:
    • Both DeriveAnyClass and GeneralizedNewtypeDeriving are enabled
      Defaulting to the DeriveAnyClass strategy for instantiating Zeros
    • In the newtype declaration for ‘Basis1’
   |         
26 | newtype Basis1 = Basis1 Text deriving (Show, Read, Eq, Ord, Generic, Zeros)
   |                                                                      ^^^^^

/home/frank/Workspace8/testSome/Lib/DerivingExampleDerive.hs:26:70: warning: [-Wmissing-methods]
    • No explicit implementation for
        ‘zero’
    • In the instance declaration for ‘Zeros Basis1’
   |         
26 | newtype Basis1 = Basis1 Text deriving (Show, Read, Eq, Ord, Generic, Zeros)
   |                                                                      ^^^^^
instance Zeros Text where zero = (""::Text)

的派生

instance Zeros Basis1 where zero = Basis1 zero  

应该是deriveanyclass策略的结果,但不是。

共有1个答案

谷梁弘深
2023-03-14

GeneralizedNewTypeDeriving将编写您建议的实例,但DeriveAnyClass将编写此实例:

instance Zeros Text => Zeros Basis1

请注意。没有方法定义!要使其工作,您需要为每个方法提供一个默认实现;通常这是通过泛型或类似的泛型编程工具包来完成的。

 类似资料:
  • 我有一个应用程序,它由一个服务器组成,该服务器可以有多个两种类型的客户端,即用户客户端和设备客户端。为此,我有一个客户端基类的向量,我将在其中添加新客户端,因为它们连接到服务器。这是我所拥有的简化版本: 我有下面的UML表示: 我怀疑这张图是否代表了正确的意图。也许我对UML不是很有经验,这就足够了,但是我认为这个图没有清楚地描述服务器中的向量将包含用户和设备而不是客户端的事实。我不知道我是否需要

  • 我有一个DF,其中包含一个巨大的可解析元数据,作为Dataframe中的单个字符串列,我们称之为DFA,使用ColmnA。 我想通过一个函数,ClassXYZ = Func1(ColmnA)将ColmnA这一列分成多个列。这个函数返回一个具有多个变量的类ClassXYZ,现在每个变量都必须映射到新的列,比如ColmnA1、ColmnA2等。 我如何通过调用Func1一次来完成从一个数据帧到另一个数

  • 问题内容: 我有一个参数化的休眠dao,它执行基本的crud操作,并且当将参数化用作委托时,对给定的dao执行基本的crud操作。 我希望能够在运行时从T派生Class以便在Hibernate中创建条件查询,例如: 我知道: 不存在,但是有什么方法可以在运行时从T导出正确的Class对象吗? 我研究了泛型和反射,但没有提出合适的解决方案,也许我错过了一些东西。 谢谢。 问题答案: 您可以将Clas

  • 问题内容: 我正在尝试访问我的一个班级中的班级常量: 如果我有一个变量,该变量持有此常量的名称,如下所示: 我可以通过某种方式访问​​MY_CONST的值吗? 显然不起作用,因为它用于静态属性。变量变量也不起作用。 问题答案: 有两种方法可以执行此操作:使用常量函数或使用反射。 常数函数 常量函数与通过声明的常量以及类常量一起使用: 反思班 第二种更费力的方法是通过反思:

  • 我理解您可以从派生类访问基类的成员,然而,我有一个函数需要指向我的基类作为一个整体的指针。例如: 有没有办法从派生类中获得指向这个基类的指针?

  • 数据结构是指若干个数据的连接方式,一个复杂的数据往往是由若干个不同类型数据形成的结构。派生类型是指用户利用FORTRAN系统内部类型,如数值型、逻辑型、字符型等自行设计出一个新的数据类型,它们实际上是由内部类型数据形成的某种结构。本章主要目的是学会按复杂数据的客观结构形态,由程序员定义出一种派生类型,再结合上将在后面叙述的模块后,可将该类型必需的操作写成内部子程序,连同派生类型一起写在模块中,供程