Eva*_*van 2 generics polymorphism haskell types functional-programming
假设我有一组记录,如
data A = A { a:: String } deriving (Show)
data B = B { b:: String } deriving (Show)
Run Code Online (Sandbox Code Playgroud)
然后是一些类型的类
class Foo a where
foo :: a -> IO ()
instance Foo A where
foo c = ...
Run Code Online (Sandbox Code Playgroud)
我也想做点什么
bar = do
push (A {a="x"})
push (B {b="y"})
Run Code Online (Sandbox Code Playgroud)
并且让这些东西最终放在某个地方,以便稍后运行,这样我就可以
map foo l
Run Code Online (Sandbox Code Playgroud)
我应该编写模板haskell来生成包装器类型并派生实例,以便列表可以是包装器类型吗?有更聪明的方法来解决这个问题吗?我老实说感觉受到haskell类型系统的影响,并且知道必须有更好的方法来做到这一点.
ham*_*mar 15
有一些方法可以通过存在量化来做到这一点,但它通常是矫枉过正的.更多Haskell-y方法是简单地预先应用foo并保留[IO ()]结果操作的列表,然后您可以sequence稍后运行它们.