Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell “我该如何解决?”;HTTP请求失败,错误为:when不是字段";消化函子代码中的运行时错误?_Haskell_Happstack_Digestive Functors - Fatal编程技术网

Haskell “我该如何解决?”;HTTP请求失败,错误为:when不是字段";消化函子代码中的运行时错误?

Haskell “我该如何解决?”;HTTP请求失败,错误为:when不是字段";消化函子代码中的运行时错误?,haskell,happstack,digestive-functors,Haskell,Happstack,Digestive Functors,我有一个简单且不完整的Happstack应用程序,它由一个定义如下的消化函子表单组成: setRecFormSpec :: Monad m => Form Text m Reminder setRecFormSpec = Reminder <$> "progname" .: string Nothing <*> "channel" .: string Nothing <*> "when" .: localTimeFormlet "

我有一个简单且不完整的Happstack应用程序,它由一个定义如下的消化函子表单组成:

setRecFormSpec :: Monad m => Form Text m Reminder
setRecFormSpec = Reminder
    <$> "progname" .: string Nothing
    <*> "channel" .: string Nothing
    <*> "when" .: localTimeFormlet "%d/%m/%Y" "%H:%M" Nothing
    <*> "recordLimit" .: stringRead "Can't parse number" (Just 7)
setRecView :: View H.Html -> H.Html
setRecView view = do
        H.div ! A.class_ "container" $ do
            H.h1 "Set Record Reminder"
            childErrorList "" view

            divFormGroup $ do
                label "progname" view "Program Name:"
                formControl $ inputText "progname" view

            divFormGroup $ do
                label "channel" view "Channel:"
                formControl $ inputText "channel" view

            divFormGroup $ do
                label "when" view "When:"
                formControl $ inputDate "when" view

            divFormGroup $ do
                label "recordLimit" view "Recording Limit (days):"
                formControl $ inputText "recordLimit" view

            divFormGroup $ do
                formControl $ inputSubmit "Signup"

-- divFormGroup -- candidate to go into a Bootstrap library
divFormGroup :: H.Html -> H.Html
divFormGroup h =
    H.div ! A.class_ "form-group" $ h

-- formControl -- candidate to go into a Bootstrap library
formControl :: H.Html -> H.Html
formControl h = (h ! A.class_ "form-control")
data Reminder = Reminder {
        programName     :: String    -- ^ name of program
    ,   channel         :: String    -- ^ name of broadcast channel
    ,   firstShowing    :: LocalTime  -- ^ time of first showing
    ,   timerPeriodDays :: Integer     -- ^ how far in advance we can set timer, in days
} deriving (Show)
提醒的定义如下:

setRecFormSpec :: Monad m => Form Text m Reminder
setRecFormSpec = Reminder
    <$> "progname" .: string Nothing
    <*> "channel" .: string Nothing
    <*> "when" .: localTimeFormlet "%d/%m/%Y" "%H:%M" Nothing
    <*> "recordLimit" .: stringRead "Can't parse number" (Just 7)
setRecView :: View H.Html -> H.Html
setRecView view = do
        H.div ! A.class_ "container" $ do
            H.h1 "Set Record Reminder"
            childErrorList "" view

            divFormGroup $ do
                label "progname" view "Program Name:"
                formControl $ inputText "progname" view

            divFormGroup $ do
                label "channel" view "Channel:"
                formControl $ inputText "channel" view

            divFormGroup $ do
                label "when" view "When:"
                formControl $ inputDate "when" view

            divFormGroup $ do
                label "recordLimit" view "Recording Limit (days):"
                formControl $ inputText "recordLimit" view

            divFormGroup $ do
                formControl $ inputSubmit "Signup"

-- divFormGroup -- candidate to go into a Bootstrap library
divFormGroup :: H.Html -> H.Html
divFormGroup h =
    H.div ! A.class_ "form-group" $ h

-- formControl -- candidate to go into a Bootstrap library
formControl :: H.Html -> H.Html
formControl h = (h ! A.class_ "form-control")
data Reminder = Reminder {
        programName     :: String    -- ^ name of program
    ,   channel         :: String    -- ^ name of broadcast channel
    ,   firstShowing    :: LocalTime  -- ^ time of first showing
    ,   timerPeriodDays :: Integer     -- ^ how far in advance we can set timer, in days
} deriving (Show)
当我浏览到表单(/setrec)的路径时,我会在控制台上看到一个空白页,并显示以下错误消息:

HTTP request failed with: when is not a field
我已经找到了错误消息的定义(在中),但我无法从中看出为什么找不到“何时”字段

这里有什么问题

如何调试此类问题

这里有一个指向github上全部代码的链接,以防您需要更深入地查看代码:


我在使用
utcTimeFormlet
时遇到了相同的错误,它在内部调用
localTimeFormlet
,因此这可能与您遇到的错误相同

查看
localTimeFormlet

localTimeFormlet dFmt tFmt d = LocalTime
  <$> "date" .: dateFormlet dFmt (localDay <$> d)
  <*> "time" .: timeFormlet tFmt (localTimeOfDay <$> d)
localTimeFormlet dFmt tFmt d=LocalTime
“日期”。:dateFormlet dFmt(localDay d)
“时间”。:timeFormlet tFmt(localTimeOfDay d)
正如您所看到的,它由两个子表单组成,这就是为什么当“不是一个字段时,
”。它指的是整体结构,
“日期”
“时间”
为实际字段

我使用的“解决方案”是完全跳过这个函数,因为我实际上只需要一个日期,而不需要精确的时间。如果你的情况也是这样,你可能也想这样做


否则,您将不得不将这两个字段合并到视图中,它应该可以工作。

我用Pseudoradius解决方案的一个变体解决了它

我定义了一个新的观点:

dateTimeView view = do
    divFormGroup $ do
        label "date" view "When (Date):"
        formControl $ inputText "date" view

    divFormGroup $ do
        label "time" view "When (Time):"
        formControl $ inputText "time" view
在我的表格中,我将其与
子视图一起使用,因此:

setRecView :: View H.Html -> H.Html
setRecView view = do
        H.div ! A.class_ "container" $ do
            -- ...

            divFormGroup $ do
                label "channel" view "Channel:"
                formControl $ inputText "channel" view

            dateTimeView $ subView "when" view

            divFormGroup $ do
                label "recordLimit" view "Recording Limit (days):"
                formControl $ inputText "recordLimit" view

            divFormGroup $ do
                formControl $ inputSubmit "Signup"
然后,
runForm
调用能够找到
when
字段并从中获取日期和时间


我可以用dateLabelText和timeLabelText参数化dateTimeView,而且可能会,但以上内容足以说明问题。

Hmmm我已经在我的setRecView中定义了一个“日期”和“时间”字段(每个都是带有各自相同名称标签的inputText)但是现在get
HTTP请求失败,原因是:日期不存在
。我也尝试了“when_date”和“when_time”作为字段名,结果是相同的。你能澄清一下我应该在视图中称这两个字段为什么吗?