haskell - 选择转到元组的一侧时出现重复的实例

标签 haskell

我想做的是这样的:

data MyDataType = MyDataType

class HasSpecialField a where
    specialField :: a -> ByteString

instance HasSpecialField a => HasSpecialField (a, b) where
    specialField (a, b) = specialField a

instance HasSpecialField b => HasSpecialField (a, b) where
    specialField (a, b) = specialField b

instance HasSpecialField MyDataType where
    specialField _ = "Coolio"

也就是说,如果你有一个像这样的元组:
myTuple :: (String, (Int, MyDataType))

然后你可以运行 specialField myTuple返回“Coolio”。

有没有办法做到这一点?

最佳答案

Data可用于完成此操作,但不会将函数限制为仅会成功的类型,从而将条件推迟到运行时。

{-# LANGUAGE DeriveDataTypeable #-}
import Control.Applicative

import Data.Generics

data MyDataType = MyDataType deriving (Typeable, Data)

specialField :: Data a => a -> Maybe String
specialField = fmap (\ MyDataType -> "Coolio") . something gfindtype

关于haskell - 选择转到元组的一侧时出现重复的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005471/

相关文章:

haskell - 内部错误 : wrong-type-argument stringp nil

haskell - 为什么 Fractional 类型类在 Haskell 中本质上不是可排序的?

haskell - 可变参数列表构造函数,如何默认为正确的类型并获得类型安全

performance - evalRandIO 的奇怪性能

Haskell 类型定义错误

Haskell 函数生成随机数,每次该数字都与前一个不同

json - 我对 Haskell 的 Text.JSON 的使用被认为是丑陋的?

haskell - 了解码合仿函数类型的操作

c - 如何在 Mac OS X 上安装 nano-hmac?

haskell - 用数字输入歧义