我是 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