将类型变量添加到newtype定义

问题描述 投票:1回答:1

在来自First Principles的Haskell Programming的练习中,它首先通过为它创建一个TooMany来声明(Num a, TooMany a) => (a, a)类型的newtype实例。我的问题是向Baz添加类型类约束。它甚至可能吗?我在网上找不到任何其他的例子。

class TooMany a where
  tooMany :: a -> Bool

newtype Baz = Baz (a, a) deriving (Eq, Show)

instance TooMany Baz where
  tooMany (Baz (n, _)) = n > 42
haskell typeclass newtype
1个回答
6
投票

您可能需要使用Baz的参数:

newtype Baz a = Baz (a, a) deriving (Eq, Show)
        -- ^^^ --

instance (Num a, TooMany a) => TooMany (Baz a) where
   ...

我不确定Num a是为了什么,但我补充说,因为你提到它。

© www.soinside.com 2019 - 2024. All rights reserved.