說我有一組記錄,如名單
data A = A { a:: String } deriving (Show)
data B = B { b:: String } deriving (Show)
那麼一些類型的類
class Foo a where
foo :: a -> IO()
instance Foo A where
foo c = ...
而且我也想這樣做
bar = do
push (A {a="x"})
push (B {b="y"})
這些東西最後列在一個列表中,以便稍後運行,這樣我就可以
map foo l
我應該編寫模板haskell來生成一個包裝類型並派生實例,以便列表可以是包裝類型?有沒有更智能的方式去解決這個問題?老實說,我被哈斯克爾型系統固定下來了,並且知道必須有更好的方法來做到這一點。
又見[FAQ條目(http://www.haskell.org/haskellwiki/FAQ#I.27m_making_an_RPG._Should_I_define_a_type_for_each_kind_of_monster.2C_and_a_type_class_for_them.3F)這一點,並且[文章它鏈接到( http://lukepalmer.wordpress.com/2010/01/24/haskell-antipattern-existential-typeclass/)。 – shachaf
所以你可以用'stuffToDo = [foo A,foo B]'或甚至'stuffToDo :: IO()'定義'stuffToDo :: [IO()]'stuffToDo = foo A >> foo B' – AndrewC