haskell 匹配参数化类型的特定类型

iih3973s  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(173)

我正在尝试使用一个外部库,它提供了如下的参数化类型:

data ParametricType a = TypeConstructor a

我有一个类型类,类似于:

class GetsString a where
    getString :: a -> String

如果ParametricType的a是一个特定的类型,我想执行一些代码。

data HoldsString = HoldsString String

instance GetsString (ParametricType HoldsString) where
    getString (TypeConstructor (HoldsString str)) = str

Illegal instance declaration for‘GetsString (ParametricType HoldsString)’(All instance types must be of the form (T a1 ... an)的错误
并且我已经尝试了对类型进行模式匹配:

instance GetsString (ParametricType a) where
    getString (TypeConstructor (HoldsString str)) = str

我收到了Couldn't match expected type ‘a’ with actual type ‘HoldsString’‘a’ is a rigid type variable bound by the instance declaration
有没有办法做到这一点,或者我在概念上走错了路?

vlju58qv

vlju58qv1#

你只是缺少了FlexibleInstances扩展名。把{-# LANGUAGE FlexibleInstances #-}放在文件的顶部,或者如果你是直接输入GHCi的话,做:set -XFlexibleInstances,这样你的第一次尝试就可以成功了。

相关问题