【发布时间】:2013-08-07 13:25:43
【问题描述】:
我是 Haskell 的新手,来自 Scala。我喜欢 Haskell,但我觉得在使用 persistent 时我正在与类型系统作斗争。
我的请求:我想将一些插入逻辑分离到它自己的方法中。我无法完全弄清楚类型或正确的方法。我所有失败的尝试都不会编译。下面是更简洁的问题。
这里是数据声明:
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Curator
name String
url String
feed String
UniqueUrl url
deriving Show
Article
url String
title String
content String
curatorId CuratorId Eq
deriving Show
|]
这是一个失败的尝试:
insertArticle :: String -> String -> String -> MaybeT (???)
insertArticle url title content = do
curatorId <- selectFirst [curatorName ==. "Fake Name"]
lift $ do
curator <- curatorId
insert (Article url title content curator)
所以,我的问题:
-
???中应该是什么类型? -
lift在正确的位置吗? (通常编译器更有帮助)。 - 有没有更好的方法来做到这一点?
PS - 我已经成功抽象出其他逻辑,例如插入只是给我带来了一个痛苦的世界。使用SqlPersistM时无法编译它
getFeeds :: SqlPersistM [Curator]
getFeeds = do
curatorIds <- selectList [] [Asc CuratorName]
let curatorGenerics = map entityVal curatorIds
let curators = map (\x -> x :: Curator) curatorGenerics
return curators
【问题讨论】: