
blkmrkt
05.10.2016
20:18:40
все норм работало пока не понадобилось работать с более чем 1 типом данных из JSON, в котором есть поле id...

Kit
05.10.2016
20:19:10
может я конечно не о том, не понимаю, у вас там id переопределен, по синтаксису это должна быть функция, (id t) функция которая действует справа на строку, вы уверены в определении самой функции?

Anatolii
05.10.2016
20:21:03
А почему print а не printf
?

Google

blkmrkt
05.10.2016
20:21:34

Anatolii
05.10.2016
20:21:40
Ну ок

blkmrkt
05.10.2016
20:21:50
putStr тож работает ?

Anatolii
05.10.2016
20:22:12
Даже не знаю что сказать
У меня точно работало

Kit
05.10.2016
20:22:38
так типы не сходятся

Anatolii
05.10.2016
20:22:44
?

Kit
05.10.2016
20:23:24
я не знаю какой тип у printf, но print :: Show a => a -> IO ()

Anatolii
05.10.2016
20:23:25
Он же там выше явно тип указал
А, про это
Ну уже ж заменил
А ам выше явно указал Maybe wall

blkmrkt
05.10.2016
20:24:00
вот так пробовал указывать вручную тип, но может неправильно делал

Google

Kit
05.10.2016
20:24:25
все равно после $ все будет вычисляться, а там стоит выражение типа СТРОКА ЧИСЛО

Anatolii
05.10.2016
20:25:37
А проекта нету где-то на гитхабе?

blkmrkt
05.10.2016
20:26:04
не сорян

Anatolii
05.10.2016
20:26:34
Ну доллар с принтф реально убрать можно
Но ошибка наверное другая бы была

blkmrkt
05.10.2016
20:27:02
уже убрал, но оно не влияет ни на что наверное

Kit
05.10.2016
20:27:49
попробуй скобки убрать
вместе с внутренностями
в качестве теста (а то как сарказм выглядит)

Anatolii
05.10.2016
20:28:45
Пословиц для этого прагма не нужна
Оно по дэфолту включено

_______bx
05.10.2016
20:32:28
а п

blkmrkt
05.10.2016
20:32:42
я в принципе уже готов продолжить писать код, только не обращаясь к этим всем внутренностям моих типов ?

_______bx
05.10.2016
20:33:11
а printf он откуда
data Wt = Wt {id :: Int}
wt = Just Wt {id = 1}
case wt of
Just x -> id x
Nothing -> 0
так работает

blkmrkt
05.10.2016
20:34:46
Text.Printf
Вот это не соберется из-за ambiguous occurence test
{-# LANGUAGE DuplicateRecordFields #-}
data A = A { test :: String } deriving Show
data B = B { test :: String } deriving Show
testme = putStrLn $ test (A 32)

Kit
05.10.2016
20:38:32
попробуй вместо id лямбда функцию запихнуть, может компилятор просто не понимает какой туда тип подставляется

Google

Kit
05.10.2016
20:39:04
(\(Wt i) -> i)

blkmrkt
05.10.2016
20:40:36
то же самое(

Kit
05.10.2016
20:40:57
без id
у t какой тип сейчас
можешь сказать?

blkmrkt
05.10.2016
20:43:45
WallTask
data WallTask = WallTask {
id :: Int
} deriving (Show, Generic)

Kit
05.10.2016
20:44:25
значит вместо этой скобки попробуй
$ (\(WallTask i) -> i) t

blkmrkt
05.10.2016
20:46:16
хммммммм. Ошибка пропала, на этой строчке все теперь ок. Только теперь оно будет принтить саму структуру похоже

Kit
05.10.2016
20:47:15
ошибка была, видимо, из-за того, что компилятор не понимал id из какого контретно типа применять

blkmrkt
05.10.2016
20:47:37
только как теперь id то достать

Kit
05.10.2016
20:48:43
ничего не поделаешь, теперь t может быть только определенного типа всегда, ну по другому и быть не может вообще
еще можно вместо того что добавил попробовать id (t :: WallTask)

blkmrkt
05.10.2016
20:50:13
делал раньше вот так:
Just t -> printf "[+] Parsing wall %d\n" id (t :: WallTask)
а нужно было вот так:
Just t -> printf "[+] Parsing wall %d\n" $ id (t :: WallTask)

Kit
05.10.2016
20:50:52
=)

blkmrkt
05.10.2016
20:50:56
мдауш, ну спасибо, у меня нет слов

Google

Kit
05.10.2016
20:51:11
спасиб канеш
но ты первый чел кому с хаскелем помог!!! ?

blkmrkt
05.10.2016
20:51:41
хехех
ровно то же самое - ambiguous occurence id

_______bx
05.10.2016
20:58:04
проще всего id переименовать
если можно

blkmrkt
05.10.2016
20:58:43
неа, это из жсона приходит от внешнего апи. не хотелось бы вручную сериализаторы писать под каждый мелкий тип
да и идти по легкому пути не охота ?

Kit
05.10.2016
21:01:52
если ты о строке 147, то надо t с объявлением типа в скобки взять

_______bx
05.10.2016
21:02:00
ну а добавить функцию которая берет id

Kit
05.10.2016
21:02:50
а вообще я думаю, когда писал функцию decode не указывал ее полный тип

blkmrkt
05.10.2016
21:03:07

Kit
05.10.2016
21:03:09
ой нет, вижу. тут я нерпав
со строкой 151 разобрался?

blkmrkt
05.10.2016
21:04:02

Kit
05.10.2016
21:04:26
?

blkmrkt
05.10.2016
21:04:30
интересно, мне hlint предлагает упростить (id (t::FriendTask)) до (t :: FriendTask)

Kit
05.10.2016
21:04:58
попробуй!

blkmrkt
05.10.2016
21:05:07
это наверное потому что в нем одно лишь поле id, и show t эквивалентен show id?

Kit
05.10.2016
21:06:31

Google

Kit
05.10.2016
21:07:44
а что ты пишешь? Это что будет?

blkmrkt
05.10.2016
21:08:45
г-ди, собралось! пушка!

Paul
05.10.2016
21:09:13
Воскрес.

_______bx
05.10.2016
21:10:25

blkmrkt
05.10.2016
21:12:40
а что ты пишешь? Это что будет?
я в принципе все написал и работало нормально с одним типом объектов из апи, потом обнаружил что в GHC 8 есть DuplicateRecordFields и вроде как можно в одном модуле определять дубликаты. Пердолился с переустановкой stack/ghc/ghc-mod/ide, и вот застрял на том как обратиться к этим дублированным полям типов. Оказалось что не хватало $ в printf ?
осталось еще CircleCI настроить чтоб бинарник из main автоматом как-то пушился на все машины, и будет ништяк

Kit
05.10.2016
21:15:36

blkmrkt
05.10.2016
21:16:06
ну сорри, я просто взволнован

Kit
05.10.2016
21:16:28
знакомо =)

blkmrkt
05.10.2016
21:17:40
мне очень нравится то чувство при работе с хаскелем, когда можно писать код несколько часов и, если нет ошибок, знать что оно соберется и будет работать

Kit
05.10.2016
21:18:20
да, я тоже очень много времени экономлю с такой системой
не приходится постоянно перепроверять и тестить на всем подряд

blkmrkt
05.10.2016
21:24:18
угу. Слегка напрягает лишь непрозрачность компилятора, я не понимаю как он работает. Особенно STM и все что связано с конкурренси/параллелизмом. Вот например я воспользовался либой amqp, и вышло так что 50 параллельных воркеров грузили два ксеона Е5-4650 на 100%, и сообщения доставлялись внезапными очередями. Лишь потом случайно нашел крупными буквами в доках заметку о том, что реюзать один канал в разных тредах нельзя.
и интересно, все равно собираешь ли ты бинарник с -threaded или нет, ни разу не видел чтоб процессы форкались средством ОС. Нужно наверное еще читать и читать.

Kit
05.10.2016
21:30:42
я с такими задачами не работал