Size: a a a

2021 June 17

aK

anton K in Haskell
ещё можно придумать вариант через фантомный параметр и инстанс класса, который задаёт ключ. нО этот подход кажется более замороченным...
источник

aK

anton K in Haskell
data Api Key = Api
 { ... }

class IsKey a where
 getKey :: a -> KeyString


и при импорте

import Foo.Bar.Api

data MyKey

instance IsKey MyKey where
 getKey = "абырвалг"

type Api' = Api MyKey
источник

aK

anton K in Haskell
С точки зрения пользователя какой лучше? Или третий вариант, совсем простой

type Api a = Reader KeyString a

каким бы вы препочли пользоваться?
сколняюсь к первому подходу
источник

aK

anton K in Haskell
он лучше с интерпретатором взаимодействует. В нём получается можно один раз импортнуть и пользоваться.
А в третьем нужно будет в конце рассчитывать на runReader
источник

aK

anton K in Haskell
с другой стороны чуть корявее будут все функции, которые зависят от Api им придётся принимать интерфейс целиком как параметр.
источник

aK

anton K in Haskell
или они тоже имогут внутри initApi вызывать и принимать только ключ
источник

M

Mansur in Haskell
Пользователям никогда не потребуется использовать несколько ключей одновременно? Какой-нибудь сервис для нескольких пользователей и т.п.?
источник

aK

anton K in Haskell
полагаю, что несколько ключей может использоваться для распараллеливания нагрузки. Если количество запросов ограничено по времени по одному ключу.

но чаще всего будет использоваться один ключ
источник

a

adam in Haskell
type HasKey = (?key :: ApiKey)
источник

aK

anton K in Haskell
спасибо, да, похоже на то. Тут подробно описан этот метод:

https://ocharles.org.uk/posts/2014-12-11-implicit-params.html
источник

aK

anton K in Haskell
хотя в скале мне очень не нравились implicit
это по-началу удобно, потом код начинает чудить, и сложно понять что куда прилетает.

то есть на большие программы по опыту плохо масштабируется
источник

AP

Aleksei (astynax) Pi... in Haskell
А кто-нить случайно будет на SECON в выхи? Не то чтобы чисто функциональная туса, но всё же
источник

AP

Aleksei (astynax) Pi... in Haskell
Я буду выступать, например
источник

G

GNU/Vsevolod in Haskell
Я ставил только ghcup из аура, все остальное менеджил им. Можно конечно ставить пакманом haskell-*, но это будут очень частые обновления и отстутствие статики
источник

AP

Aleksei (astynax) Pi... in Haskell
тоже ghcup пользую
источник

K

Kir in Haskell
а я через stack всё ставлю
источник

AR

Alexey Raga in Haskell
Можно порвать хаскелистов ещё больше и предложить сделать как в OCaml / F# - если на разных строках, то разделитель (запятая) не нужен 😉

x = [
 1
 2
 3
]
источник

к

кана in Haskell
в хаскеле такое уже есть - в ду нотации. Там если на разных строках и без {}, то разделитель не нужен. Аналогично в кейсе, в let

x = do
 { a
 ; b
 }

x = do
 a
 b
источник

a

adam in Haskell
как раз вчера порвался с этого
источник

AR

Alexey Raga in Haskell
я не знаю про edge cases, но чисто эстетически отсутствие запятых мне импонирует больше, чем лишние запятые в начале там или в конце
источник