
Denis
04.01.2018
23:58:57

Ignat
04.01.2018
23:59:22
да ето так
ну если не скатываться совсем в оффтопик
то имея в do-нотации строку уровня myInt <- getIntFromSomewhere

Google

Ignat
05.01.2018
00:01:11
можно написать рядом let squaredInt = sqr myInt
видимо, этого @valsaven и хочет

Denis
05.01.2018
00:09:16
постановки задачи даже не увидел

Ignat
05.01.2018
00:10:18
ну «передать Int от пользователя в функцию»
звучит как «получить Int извне, преобразовать чистыми функциями и выплюнуть обратно»
насколько позволяют понять мои телепатические способности

Vasiliy
05.01.2018
00:12:11
лучше конечно разобраться почему, если интересно (https://t.me/haskell_learn), иначе это будет до следующей подобной "проблемы"

Val
05.01.2018
00:14:30
Да, спасибо за ссылку, пожалуй сначала что-то такое пройду лучше. С наскоку, видимо, не попрототипировать. На глупые проблемы слишком много времени уходит
Тем более там IO в самом конце))

Denis
05.01.2018
00:38:24
@valsaven вот тебе пример с передачей Int
process = do
n <- print "Input count of numbers " >> getLine
case (readEitherSafe :: String -> Either String Int) n of
Left s -> print s >> process
Right v -> do
xs <- T.for [1..v] $ \ i -> do
print $ "Input number #" ++ show i
getLine
case traverse (readEitherSafe :: String -> Either String Int) xs of
Left s -> print s
Right xs'' -> print $ sum xs''
main :: IO ()
main = process

Artem
05.01.2018
11:33:33
Скажите, пожалуйста, кто-нибудь понимает, как поживают OverloadedRecordFields? после февраля 2017 (эпический бой про линзы https://github.com/ghc-proposals/ghc-proposals/pull/6) ничего не видно, в том числе, в ghc wiki

A64m
05.01.2018
11:36:56
т.е. механика орфовская из пропозала вся в 8.2 есть, только инстанс для лейблов не прошел

Google

Artem
05.01.2018
11:39:18
собственно вопрос, есть ли новости, когда и в каком виде пройдёт?

A64m
05.01.2018
11:39:30
но есть ли в этом смысл? сам функционал у ORF довольно убогий, не лучше ли какой-нибудь generic-lens использовать?
ну, вернее, можно предположить что работа Гендри над абстрактными линзами это часть работы по ORF

Artem
05.01.2018
11:41:30
я не хотел бы обсуждать линзы: изначально ORF рекламировался, как более гибкий механизм геттеров (условно, избавление от требования уникальности имён). Разница с линзами такая, что геттеры это entry-level средство Haskell, в то время как линзы это что угодно,но не entry-level (называйте advance или ка квам нравится)

A64m
05.01.2018
11:42:40

Artem
05.01.2018
11:43:18
ну, это же полу решение, пользоваться ими как раньше нельзя
(Duplicate)

A64m
05.01.2018
11:45:14
геттерами как функциями нельзя (без аннотации типа, там такой убогий близорукий TDNR), а в пм с вайлдкартами можно, я так их всегда восновном и использовал
а роу-полиморфизм для геттеров из ORF в 8.2 и сам по себе не энтрилевельный, там уже что с линзами что без линз. Без линз просто убого все и неудобно

Artem
05.01.2018
11:46:51
да, меня интересует использование как функциями (собственно, название "геттер" это в первую очередь и подразумевает с моей точки зрения)

A64m
05.01.2018
11:47:38
ну вот чтоб использовать как геттер надо сиротский инстанс в приложении объявить

Artem
05.01.2018
11:47:42
роу-полиморфизм не нужно понимать новичку чтобы этим пользоваться, как не нужно понимать внутреннее устройство GHC, чтобы им что-то компилировать
да, вопрос был про то, когда это требование будет снято и какие первые шаги на когда намечены, ведь это всё было в начальном плане, как я понимаю

A64m
05.01.2018
11:48:52
не нужно, но сигнатуры и типы в ошибках нужно как-то понимать (не обязательно глубоко) линзами тоже не приходя в сознание можно пользоваться с теми же оговорками
ну, может можно протащить сиротский инстанс в отдельном модуле в base, который все равно в библиотеках не используешь, также можно и подругому ORF сделать, но вроде никто не делает
ORF Гендри и так раза 4 делал прежде чем он в нынешнем виде попал в 8.2, я что-то сомневаюсь, что 5й раз будет делать


Artem
05.01.2018
11:55:38
последнее что видно от него на эту тему это подпиливание DRF (октябрь 2017)
https://github.com/ghc-proposals/ghc-proposals/pull/84

Google

A64m
05.01.2018
11:57:35
{-# LANGUAGE AllowAmbiguousTypes
, FlexibleInstances
, MultiParamTypeClasses
, ScopedTypeVariables
, TypeApplications
, DuplicateRecordFields
, OverloadedLabels
, FlexibleContexts
#-}
module Records where
import GHC.OverloadedLabels
import GHC.Records
instance HasField x r a => IsLabel x (r -> a) where
fromLabel = getField @x
как-то так это должно все выглядеть


Artem
05.01.2018
12:14:55
{-# LANGUAGE AllowAmbiguousTypes
, FlexibleInstances
, MultiParamTypeClasses
, ScopedTypeVariables
, TypeApplications
, DuplicateRecordFields
, OverloadedLabels
, FlexibleContexts
#-}
module Records where
import GHC.OverloadedLabels
import GHC.Records
instance HasField x r a => IsLabel x (r -> a) where
fromLabel = getField @x
как-то так это должно все выглядеть
о, здорово, спасибо! примера на видном месте так и не нашёл :(
кстати, опытным путём установлено, что AllowAmbiguousTypes, OverloadedLabels и FlexibleContexts можно опустить;
тем не менее, выглядит, конечно, печально…
получилось вот как-то так:
{-# LANGUAGE FlexibleInstances
, MultiParamTypeClasses
, ScopedTypeVariables
, TypeApplications
, DuplicateRecordFields
, OverloadedLabels
#-}
import GHC.OverloadedLabels
import GHC.Records
data Person = MkPerson { name :: String }
data Dog = MkDog { name :: String }
instance HasField x r a => IsLabel x (r -> a) where
fromLabel = getField @x
bark :: Dog -> IO ()
bark d = putStrLn $ "Arrg from " ++ #name d
main = bark $ MkDog "Spike"


A64m
05.01.2018
12:16:34
ну часть расширений нужна только в модуле где инстанс объявлен для самого объявления, часть наоборот для того чтоб рекорды использовать, для инстанса не нужных
OverloadedLabels как раз нужны там где соотв. синтаксис используется

Artem
05.01.2018
12:18:48
в примере выше же есть #name или речь о каком-то другом синтаксисе?

A64m
05.01.2018
12:19:48

Artem
05.01.2018
12:19:59
ну вот компилируется…

A64m
05.01.2018
12:20:19
наверное просто ранее скомпилированное работает или что-то вроде

Artem
05.01.2018
12:23:16
да, извиняюсь, это я в GHCi пробовал с включённым флагом

Антон
05.01.2018
15:53:10
Ребят, я дико извиняюсь, но что это за лейблы и как они связаны с линзами?

A64m
05.01.2018
16:05:42

Artem
05.01.2018
16:26:03

Abbath
05.01.2018
23:49:21
Нас 600

Alex
05.01.2018
23:53:57

Dmitry
06.01.2018
08:51:34
давайте всё-таки поговорим о том, когда не стрёмно использовать type family , а не data family
иногда они нужны
есть какие-то best practices / или заметки, что избегать в каких случаях

Google

Alexander
06.01.2018
08:54:55
я почти никогда не использую data family

Dmitry
06.01.2018
08:58:15
ну помимо ассоциированных?
или ты даже и в ассоциированные делаешь type family, а потом везде прокси таскаешь или type applications ?
так-то понятно, что без data family удобнее было бы.

Sergey
06.01.2018
09:28:32
народ, haskell же не делает откаты, как Prolog?

Dmitry
06.01.2018
09:38:16
а пролог делает откаты? надо его внедрить в госсектор

Hot
06.01.2018
09:44:37
Подскажите, пожалуйста, правильно ли я понимаю работу с SQLite в Haskell при помощи sqlite-simple (https://github.com/nurpax/sqlite-simple). Создаём АДТ (data), который будет отображать одну запись в отдельно взятой таблице нашей БД. Создаём инстанс тайпкласса FromRow для этого АДТ, в котором реализуем функцию для преобразования SQL-записи в этот АДТ. Можете, пожалуйста, исправить и/или дополнить то, что я сказал?

Alexander
06.01.2018
09:48:05

Sergey
06.01.2018
09:48:53

Hot
06.01.2018
09:49:02
Да

Admin
ERROR: S client not available

Sergey
06.01.2018
09:49:07
супер) спасибо)

Alexander
06.01.2018
09:49:32

Hot
06.01.2018
09:50:55
Ясно, спасибо. Наверное я всё же где-то налажал с определениями/описаниями?

Dmitry
06.01.2018
10:01:52
на текущий момент какой самый быстрый и норм. работающий бинарный сериализатор есть?
нужен что бы 1) сдампить объект 2) посчитать хэш 3) использовать как ключ
т.е версионность не нужна, например
https://hackage.haskell.org/package/store - ок, например?

Alexander
06.01.2018
10:03:35
store/cvor
cbor

Google

Alexander
06.01.2018
10:03:46
один из этих

Dmitry
06.01.2018
10:04:03
вы что используете?
и как давно

Hot
06.01.2018
10:04:10
За cvor и cbor стреляешь в упор?

A64m
06.01.2018
10:04:17
cbor называется сериалайз же

Alexander
06.01.2018
10:04:37
я не помню, когда использовали то cbor был
сейчас мы store юзаем, оно под наши данные лучше точно
+ у нас только trusted source и мы их прямо во внешний мир не отдаем, и многие vector-like

Dmitry
06.01.2018
10:06:15
ну мне вообще просто хэш посчитать от чего-нибудь.

Alexander
06.01.2018
10:06:41
от сериализованного представления норм?

Dmitry
06.01.2018
10:07:27
ну, да.

Alexander
06.01.2018
10:07:35
store аллоцирует всю байтостроку, но это ж норм?

Dmitry
06.01.2018
10:07:49
объекты маленькие
пока что.

Alexander
06.01.2018
10:08:08
если медленно считается думать как мемоизировать

Dmitry
06.01.2018
10:08:27
пока что кажется что это пофиг, ботлнек будет не здесь

Alexander
06.01.2018
10:08:32
наверное с компактами можно?
ну да
разумно

Dmitry
06.01.2018
10:08:50
я их не умею, но наверное сейчас лучше не запариваться и оптимизировать, когда прижмет
сейчас просто надо взять то, что в на 01.2018 считается ок сериализатором

Alexander
06.01.2018
10:09:21
store норм

A64m
06.01.2018
10:09:29
что-то мне кажется компакты не самая хорошая идея чтоб хеш считать