【发布时间】:2011-11-15 05:43:04
【问题描述】:
这是我的代码的简化版本:
data Bookmark = Bookmark {
url :: String
, label :: String
} deriving (Show)
genBookmark :: String -> String -> IO Bookmark
genBookmark u l = return ( Bookmark { url = u, label = l } )
但是Strings(url, label)在数据库中,所以我要处理IO String。我必须有一个非常简单的解决方案,但我没有看到它(而且广泛的网络搜索并没有让我到任何地方。)
基本上我想将我的代码更改为:
genBookmark :: IO String -> IO String -> IO Bookmark
这是另一个说明问题的版本:
genBookmark2 :: String -> String -> Bookmark
genBookmark2 u = return ( Bookmark { url = u, label = newlabel } )
where newlabel = getLine
出现错误“预期类型:字符串,实际类型:IO 字符串”。
====== 编辑 =======
这是出现错误的“真实代码”(以及我从答案中得到的解决方案):
getSkosConceptRight :: String -> IO SkosConcept
getSkosConceptRight catName = do
suConcepts <- getSubConcepts catName
concept <- getMainConcept catName
return ( concept { subConcepts = suConcepts })
getSkosConceptWrong :: String -> IO SkosConcept
getSkosConceptWrong catName = return ( concept { subConcepts = suConcepts })
where suConcepts = getSubConcepts catName
concept = getMainConcept catName
getMainConcept :: ShortUrl -> IO SkosConcept
getSubConcepts :: ShortUrl -> IO [SkosConcept]
【问题讨论】: