4

私がやりたいことは次のようなものです:

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して「クーリオ」を返すことができます。

とにかくこれを行うことはありますか?

4

1 に答える 1

1

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
于 2013-04-16T17:28:14.677 に答える