【发布时间】:2011-04-28 09:25:04
【问题描述】:
我对 haskell 中的一些东西感到困惑。首先我会清楚地解释我的问题,
我有从数据库获取结果的函数调用“func1”
类型定义
func1 :: IO[[String]]
func1 = do
xx <- main --returns the sql output
return (map (map fromSql) xx :: [[String]])
我需要编写两个函数来给我funcWnt :: IO[[String]] -> [[String]] 和funcWnt2 :: [String] -> Splice m
我在“funcWnt”中尝试了<-,但没有成功。谁能告诉我如何做到这一点?或任何其他方式做到这一点?'funcWnt2 :: [String] -> 我已经创建,我想知道'funcWnt'函数
thnxxxx!!
【问题讨论】:
-
再次,没有
IO a -> a类型的函数(其中a 是类型变量),你也不需要。阅读 monad 教程。如果您已经这样做了,请再做一次(也许换一个不同的),因为您似乎错过了一些非常重要的部分。 (另外,main是程序的开始,理想情况下调用一次 - 为什么要从其他地方显式调用它?将 SQL 获取放入它自己的函数中。) -
thanxxxx,我将再次阅读 monad 教程。好的,我会更正它,thanxx 再次:-)
-
检查 IO 问题,或开始 monad 教程。 stackoverflow.com/questions/tagged/…
-
@delnan 好吧,没有 pure 函数
IO a -> a。但是有unsafePerformIO,它是 Haskell 98 的外部函数接口规范的一部分。 -
@Johnathan:嘘!是的,但是 OP 和大多数其他人甚至没有丝毫使用它的理由,应该只停留在纯洁的境界。