Скотти Конвертировать GET Параметр / Lazy.Text преобразование - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь передать параметр GET в функцию и объединить строку из результата

{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Monoid ((<>))
import Web.Scotty

f x = x <> x
main = do
  scotty 3000 $ do
    get "/f/:x" $ do
        x <- param "x"
        text ("f(" <> x <> ") = " <> f x)

Чтобы сделать мое приложение еще более интересным, я хочу использовать функцию, для которой требуется экземпляр типа аргументаNum, например,

f x = x * x

Как преобразовать / прочитать x в Num (или Maybe...) и преобразовать результат функции обратно в Data.Text.Internal.Lazy.Text?

Я пытался

text ("f(" <> x <> ") = " <> (show $ f $ read x))

, что приводит к ошибкам:

• Couldn't match expected type
  ‘text-1.2.3.1:Data.Text.Internal.Lazy.Text’
  with actual type ‘[Char]’

1 Ответ

0 голосов
/ 10 октября 2018

Спасибо Бобу Далглишу (комментарии) за помощь в решении этой проблемы, с помощью функций pack / unpack я смог решить ситуацию

{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Monoid ((<>))
import qualified Data.Text as T
import qualified Data.Text.Lazy as L
import Web.Scotty

f x = x * x
main = do
  scotty 3000 $ do
    get "/f/:x" $ do
        x <- param "x"
        let res_string = show $ f $ read $ T.unpack x
        let label_string = "f(" <> (T.unpack x) <> ") = "
        text $ L.pack (label_string <> res_string)

Обратите внимание, что read "опасен" ине должен быть заменен на readMaybe, но это было бы не по теме здесь.

...