0

最近 Haskell でコーディングを始めたばかりで、do blockを使い始めました。私は Scala の世界から来ました。本やいくつかのブログを読んだ後、do ブロックが私たちの理解のインスピレーションであることがわかりました。しかし、それでも私はすべての関数を入力 - >出力として渡す引数に苦労しています

ここで私のコードでは、リクエストを取得するために scotty http サーバー ライブラリを使用しており、そのリクエストを mySQL で永続化しようとしています。

しかし、この行では、たぶんから値を取得して、別の関数に送信して永続化しようとしています

user <- (fmap (\user -> insertUser user) maybeUser)

関数が期待される型を返さないため、コンパイルされません

ActionT テキスト IO (おそらくユーザー)

しかし

IO ユーザー

ここに私のホールプログラム

createUser :: ActionM ()
createUser =  do maybeUser <- getUserParam
                          -- Persist the user
                          _ <- persistUser
                          json maybeUser

getUserParam :: ActionT Text IO (Maybe User)
getUserParam = do requestBody <- body
                  return (decode requestBody)

persistUser :: Maybe User -> ActionT Text IO (Maybe User)
persistUser _maybeUser = let maybeUser = _maybeUser in do
                           user <- maybeUser
                           user <- (fmap (\user -> insertUser user) maybeUser)
                           return maybeUser

insertUser :: User -> IO User
insertUser _user = let user = _user in do
    conn <- createConnection
    status <- execute conn insertUserQuery [MySQLInt32 (intToInt32 $ getUserId user), MySQLText "hello_haskell_world"]
    return user
4

1 に答える 1