私はハスケルには新しく、おそらく本当に愚かな質問をしています。 は、私が実行するには、次のコードを取得しよう:doブロックの返信ケース
asdf :: Maybe a -> Maybe a
asdf k = do
return $ case k of
Nothing -> Nothing
Just x -> Just x
私はリターンが非感があるだけでやるということ、これは基本的にfmap
であることを知っていると。私が実際にやりたいことは次のとおりです
vote :: PostId -> Bool -> Maybe (Int, Int)
vote id v = do
p <- runSQL $ P.get id
return $ case p of
Nothing -> Nothing
Just p -> do
let uv = postUpvotes p
let dv = postDownvotes p
let nuv = if v then uv + 1 else uv
let ndv = if not v then dv + 1 else dv
runSQL $ update id [PostUpvotes =. nuv, PostDownvotes =. ndv]
(nuv, ndv)
これは複数の問題があります。私の最初の例で何が間違っていますか? 2番目の問題へのアプローチは完全に間違っているのでしょうか?あなたはどのようにそれを書いていますか?
'runSQL'の種類は何ですか?純粋ではないと仮定して、 'Maybe(Int、Int)'を返す関数内でそれを実行することはできません。 – Lee
これはこのチュートリアルのものです:https://www.spock.li/tutorials/rest-api – lbrndnr
IOを行うことはできません。IOのモナドに値を返さない限り、おそらく 'IO(Maybe(Int、 Int)) ')。 – chi