【发布时间】:2018-12-24 14:15:40
【问题描述】:
例如,函数式程序可能是一个将输入字符串映射到输出字符串的函数:
main :: String -> String现在,一个用(喘气!)C 编写的“包装器”程序可以从某处获取输入字符串 [...] 将函数应用于它,并将结果存储在某处 [...]
然后他接着说,这在包装器中定位了“罪恶”,并且这种方法的问题在于一种罪恶导致了另一种罪恶(例如,多个输入、删除文件、打开套接字等)。
这对我来说似乎很奇怪。当以这种方式接近时,我会认为 Haskell 将是最强大的,甚至可能是最有用的。即输入是位于文件中的字符串,输出是新文件中的新字符串。如果输入字符串是一些与数据连接的数学表达式,而输出字符串是(非 Haskell)代码,那么您可以 Get Things Done。换句话说,为什么不总是把 Haskell 程序当作翻译器呢? (或者作为编译器,但作为翻译器,您可以将真正的 I/O 混合到最终的可执行文件中。)
不管这作为一般策略是否明智(我很欣赏我们可能想要完成的某些事情可能不会从数学开始),我真正的问题是:如果这确实是方法,我们可以避免@ 987654326@ 类型?我们是否需要其他语言的包装器?真的有人这样做吗?
【问题讨论】:
-
interact函数可以让你这样写main。