質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

Q&A

解決済

1回答

360閲覧

YesodでSQLiteを使って新規登録をしたいがエラーを解消できない

apo

総合スコア349

Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

0グッド

0クリップ

投稿2018/12/25 12:23

参考サイトを参考にYesodでSQLiteを使ってデータの新規登録をしようとしていますが、エラーがでて、エラーを解消できません。

ご教示頂きたく。

エラー

[apo@ringo-apo my-project]$ stack build Warning: /home/apo/doc/dev/github/hs_yesod_sqlite/my-project/my-project.cabal was modified manually. Ignoring /home/apo/doc/dev/github/hs_yesod_sqlite/my-project/package.yaml in favor of the cabal file. If you want to use the package.yaml file instead of the cabal file, then please delete the cabal file. Building all executables for `my-project' once. After a successful build of all of them, only specified executables will be rebuilt. my-project-0.0.0: build (lib + exe) Preprocessing library for my-project-0.0.0.. Building library for my-project-0.0.0.. [14 of 15] Compiling Handler.Article ( src/Handler/Article.hs, .stack-work/dist/x86_64-linux-gmp4/Cabal-2.0.1.0/build/Handler/Article.o ) /home/apo/doc/dev/github/hs_yesod_sqlite/my-project/src/Handler/Article.hs:42:12: error: parse error on input ‘=’ Perhaps you need a 'let' in a 'do' block? e.g. 'let x = 5' instead of 'x = 5' | 42 | widget = $(widgetFile "article-editor-form") | ^ -- While building package my-project-0.0.0 using: /home/apo/.stack/setup-exe-cache/x86_64-linux-gmp4/Cabal-simple_mPHDZzAJ_2.0.1.0_ghc-8.2.2 --builddir=.stack-work/dist/x86_64-linux-gmp4/Cabal-2.0.1.0 build lib:my-project exe:my-project --ghc-options " -ddump-hi -ddump-to-file -fdiagnostics-color=always" Process exited with code: ExitFailure 1

Article.hs

{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ViewPatterns #-} {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE QuasiQuotes #-} module Handler.Article where import Import import Control.Monad.Logger import Data.Text (Text) import Database.Persist.Sqlite import Yesod import qualified Database.Esqueleto as E import Database.Esqueleto ((^.)) import qualified Data.Conduit.List as CL import Data.Conduit (($=)) -- フォーム取得 articleForm :: Maybe Article -> Html -> MForm Handler (FormResult Article, Widget) articleForm article extra = do (titleResult, titleView) <- mreq textField "タイトル" (articleTitle <$> article) (publishedResult, publishedView) <- mreq dayField "公開日" (articlePublished <$> article) (viewCountResult, viewCountView) <- mopt intField "ビュー数" (articleViewCount <$> article) let result = Article <$> titleResult <*> publishedResult <*> viewCountResult widget = $(widgetFile "article-editor-form") return (result, widget) -- 新規登録 getArticleR :: Handler Html getArticleR = do let header = "Article新規登録" :: Text (widget, enctype) <- generateFormPost $ articleForm Nothing defaultLayout $(widgetFile "article") -- 新規登録処理のポスト postArticleR :: Handler Html postArticleR = do ((result, widget),enctype) <- runFormPost $ articleForm Nothing let header = "Article新規登録" :: Text case result of FormSuccess article -> do -- Postされたデータが正常な場合 articleId <- runDB $ insert article redirect ArticleListR FormFailure _ -> do -- 不正な入力値のデータが送信された場合(必須項目が未入力等) setMessage "不正なデータが送信されました。" defaultLayout $(widgetFile "article") FormMissing -> defaultLayout [whamlet|データが送信されませんでした。 |] _ -> undefined

試したこと
言語拡張の追加、Importの追加 → エラー変わらず

プログラムの全コード
https://github.com/ringo-apo/hs_yesod_sqlite

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

ぱっと見回答ですが、
widget =の行のインデントおかしくないですか?

投稿2018/12/25 12:51

tamoto

総合スコア4103

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

apo

2018/12/25 13:47 編集

<*>にそろえてみたり、letにそろえてみたりしましたが エラーに変わりはありませんでした。
tamoto

2018/12/25 13:51

ちょっと試せてなくて申し訳ないです。 result = Articleの後の各記号行をArticleに揃えて、widgetをresultと揃えてもダメでしょうか?
apo

2018/12/25 14:44

エラーが変わりました、ありがとうございます。 /home/apo/doc/dev/making/Haskell/hs_yesod_sqlite/my-project/src/Handler/Article.hs:74:67: error: parse error on input ‘let’ | 74 | ((result, widget),enctype) <- runFormPost $ articleForm Nothing let header = "Article新規登録" :: Text case result of FormSuccess article -> do | これもインデントエラーでしょうか。
apo

2018/12/25 22:39

上記エラーもインデントを見直したら動きました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問