【发布时间】:2014-04-19 07:30:26
【问题描述】:
我想要一些代码,我想调用一个函数foo,其中 foo 的不同实现驻留在不同的模块中。
喜欢
foo :: String -> IO[String]
模块 A:
foo :: String -> IO[String]
foo x = whatever
模块 B:
foo :: String -> IO[String]
foo x = whatever (different)
然后根据某个参数调用相应的函数。我可以使用合格的进口:
import qualified ModuleA as A
import qualified ModuleB as B
bar :: String -> String -> IO[String]
bar moduleToChoose x = case moduleToChoose of
"A" -> A.foo x
"B" -> B.foo x
_ -> Uh oh...
然而,这基本上是在尖叫“有一个更优雅™的解决方案,但你就是不明白!”有没有更好的解决方案?
【问题讨论】:
-
既然可以直接传函数,为什么还要使用
moduleToChoose呢?能不能直接做bar :: (String -> IO [String]) -> IO [String],以后调用函数的时候,在需要的地方直接做baz <- bar A.foo x?
标签: haskell