Size: a a a

2020 November 16

AR

Alexey Raga in Haskell
Alexander Vershilov
liftIO $ runResourceT
Хм. Что-то я не допёр до такого и сделал
bracket createInternalState closeInternalState $ \st -> runInternalState doStuff st


Щас попробую :)
источник

AR

Alexey Raga in Haskell
Блин, как коллеги любят RecordWildCards использовать :(
источник

AR

Alexey Raga in Haskell
А вот ещё, подскажите...
Servant документация говорит, что вот эти две записи эквивалентны и можно группировать:

type FactoringAPI =
 "x" :> Capture "x" Int :>
       (    Capture "y" Int :> Get '[JSON] Int
       :<|>                    Get '[JSON] Int
       )

type FactoringAPI' =
 "x" :> Capture "x" Int :> Capture "y" Int :> Get '[JSON] Int :<|>
 "x" :> Capture "y" Int :> Get '[JSON] Int
источник

AR

Alexey Raga in Haskell
На деле же в первом случае я получаю ошибку:

• Couldn't match type ‘(Int -> Int -> ReaderT Bool Handler Int)
                      :<|> (Int -> ReaderT Bool Handler Int)’
                with ‘Int
                      -> (Int -> ReaderT Bool Handler Int) :<|> ReaderT Bool Handler Int’
источник

AR

Alexey Raga in Haskell
Это бага в документации или я что-то делаю не  так?
источник

AR

Alexey Raga in Haskell
Сервер вот так объявляю (в первом случае ошибка, в втором - работает)
a :: Int -> Int -> ReaderT Bool Handler Int
a = undefined

b :: Int -> ReaderT Bool Handler Int
b = undefined

server2 :: ServerT FactoringAPI Res
server2 = a :<|> b
источник

KV

Kirill Valyavin in Haskell
Эквивлентно-то эквивалентно, но типы разные
источник

KV

Kirill Valyavin in Haskell
источник

AR

Alexey Raga in Haskell
Спасибо!
источник

KV

Kirill Valyavin in Haskell
Из доков:
If you want to avoid the “nested types” and the need to manually dispatch the arguments (like x above) to the different request handlers, and would just like to be able to declare the API type as above but pretending that the Capture is not factored out, that every combinator is “distributed” (i.e that all endpoints are specified like FactoringAPI' above), then you should look at flatten from the servant-flatten package.
источник

KV

Kirill Valyavin in Haskell
Ещё вроде бы при использовании Servant.API.Generic такой проблемы не возникает
источник

AR

Alexey Raga in Haskell
На самом деле так даже лучше... в моём случае :)
источник

VS

Vladislav Sabanov in Haskell
Пока отложил эту задачу.
источник

VS

Vladislav Sabanov in Haskell
Alexey Raga
А вообще, какие есть возможности скомпозить несколько Capture в один Capture?
вот здесь она частично решена, но не смержена
https://github.com/haskell-servant/servant/pull/1047
источник

AV

Alexander Vershilov in Haskell
Vladislav Sabanov
Пока отложил эту задачу.
Значит правильно помнил 🙂
источник

AT

Alexander T in Haskell
https://mail.haskell.org/pipermail/ghc-steering-committee/2020-November/001876.html
почему оверлоадед стрингс не сделать дефолтом?
источник

AV

Alexander Vershilov in Haskell
Чтобы не сломать 3540 библиотеки?
источник

AT

Alexander T in Haskell
3540 библиотек не смогут добавить {-# NoOverloadedStrings #-}?
источник

MK

Maxim Koltsov in Haskell
фига ты злой
источник

MK

Maxim Koltsov in Haskell
хвр и фадея сам будешь успокаивать
источник