Yesodod의 Paginator 패키지가 있다는 것을 알고 있지만 더 간단한 UI를 선호하여 앱의 간단한 페이지 매김 논리를 작성했습니다. 그러나 매개 변수 값을 Integer로 변환하는 방법을 찾을 수 없습니다. 나는 다음과 같은 오류 메시지가 위의 코드를 실행하면페이지 매김 : 매개 변수 값을 정수로 변환하는 중 오류가 발생했습니다.
import Data.Text (unpack, singleton)
import Data.Maybe
one = singleton '1' -- convert char to Text, required by fromMaybe
getTestPanelR :: Handler Html
getTestPanelR = do
ptext <- lookupGetParam "p" -- guessing returns Maybe Text
p <- fromMaybe one ptext -- ??? does not work
-- pn <- ??? Once p is extracted successfully, how to convert to an integer?
s <- runDB $ selectList [] [Asc PersonName, LimitTo 10 , OffsetBy $ (pn - 1) * 10]
(widget, enctype) <- generateFormPost $ entryForm Nothing
defaultLayout $ do
$(widgetFile "person")
: 나는이 #{show ptext}
를 사용하여 'ptext'를 쓰는 경우
No instance for (MonadHandler Maybe)
arising from a use of `lookupGetParam'
Possible fix: add an instance declaration for (MonadHandler Maybe)
In the second argument of `($)', namely `lookupGetParam "p"'
In a stmt of a 'do' block:
p <- fromMaybe one $ lookupGetParam "p"
In the expression:
...
그것은 Just "1"
을 보여줍니다. GET 매개 변수를 얻은 후 페이지 매기기를 수행 할 수 있도록 정수로 변환하는 방법은 무엇입니까?
Prelude Data.Maybe Data.Text> let one = singleton '1'
Prelude Data.Maybe Data.Text> let x = Just $ singleton '5'
Prelude Data.Maybe Data.Text> let y = fromMaybe one x
Prelude Data.Maybe Data.Text> y
"5"
Prelude Data.Maybe Data.Text> read $ Data.Text.unpack y ::Int -- This is probably unsafe because I cannot trust 'y' in my web app
5
업데이트 :
I를 내가이 사용 GHCi를하려고 할 때, 그것은 잘 작동
FWIW, ('다음'에 대한 1을 추가하고 '이전'에 대한 1을 뺄 필요) Ankur의 제안 pageNumber <- (lookupGetParam "p" >>= return . (read :: String -> Int) . fromMaybe "1")
@ 피곤하고 나는 다음과 같은 오류 얻을 :
Couldn't match expected type `String' with actual type `Text'
Expected type: Maybe Text -> String
Actual type: Maybe Text -> Text
In the return type of a call of `fromMaybe'
In the second argument of `(.)', namely `fromMaybe "1"'
Build failure, pausing...
를 "1"일 (Data.Text.singleton '1'
)에, 나는 여전히 GE를 변경하는 경우 정확한 오류 메시지.
감사합니다.
감사합니다. @ ankur. 위의 내 업데이트를 참조하십시오 - 나는 여전히 오류가 발생합니다. 사실 내가 실수로 "1"을 fromMaybe에 사용했을 때 전에이 오류 메시지가 나타납니다. 그 때 텍스트 경로를 따라 내려 갔지만 하스켈 지식이 부족하여 디버깅하기가 어려웠습니다. 당신의 제안에도 무엇이 잘못 될 수 있는지에 대한 생각이 있습니까? – Ecognium
업데이트 된 답변을 확인하십시오 – Ankur
Thanks @Ankur. 그게 효과가 있었어! – Ecognium