
Pavel
15.05.2018
08:32:29

Евгений
15.05.2018
08:32:58

Dmitry
15.05.2018
08:33:13
лучше что-то написать на хаскеле, пртом провести разбор и посчитать, сколько потребовалось теорката

Евгений
15.05.2018
08:33:24

Google

Leonid
15.05.2018
08:33:29

Евгений
15.05.2018
08:34:33

Александр
15.05.2018
08:34:41

Евгений
15.05.2018
08:35:47
Если смотреть на чат, то может показаться, что знание интерсекциональной теории тоже важно для написания продукта на хаскеле

Pavel
15.05.2018
08:36:28

Евгений
15.05.2018
08:36:36

Pavel
15.05.2018
08:38:12
в общем пока стратегия такая - учу базу хаскеля и пишу как идёт, а там уже когда и если дойду до теор кат, и это будет заходить - то посмотрю в эту сторону, а пока можно не сильно лезть в эту сторону и просто освоить хаскель как отдельно язык

Евгений
15.05.2018
08:38:30

Pavel
15.05.2018
08:39:06
понял, благодарю всех участников ?

Alexander
15.05.2018
08:39:44
"теоркат" нужен когда задача хорошо попадает под какую-то модель
но и без этого можно прекрасно обойтись

Александр
15.05.2018
08:40:10
А если теоркат на задачу не налазит, что делать?

Alexander
15.05.2018
08:40:26
к тому же обычно теоркат базовый, а не та жесть которую тут частенько обсуждают

Google

Alexander
15.05.2018
08:40:39
что делать если паттерн factory не решает вашу задачу?

Ilya
15.05.2018
08:40:53
уйти в девопсы

Евгений
15.05.2018
08:40:55

Александр
15.05.2018
08:40:56

Leonid
15.05.2018
08:41:08

Евгений
15.05.2018
08:41:23

Roman
15.05.2018
08:41:52

Александр
15.05.2018
08:43:02
Программирование на Haskell - это ремесло, искусство или наука?

Евгений
15.05.2018
08:43:17
Инженерия?

Evgeniy
15.05.2018
08:43:31

Dmitry
15.05.2018
08:43:31
это деятельность

Александр
15.05.2018
08:43:45
Инженерия?
Хороший ответ, но пока еще вроде только зарождается.

Ilya
15.05.2018
08:44:15

Александр
15.05.2018
08:44:30
это искать работу полгода
Оба раза меня работа сама находила, и вот еще был третий раз от одного местного обитателя, и вот еще четвертый раз люди пришли. Сегодня собеседование.

Alexander
15.05.2018
08:47:44
фейсбук небось, они всем писали?

Leonid
15.05.2018
08:47:57
И в четвёртый раз пришли люди, и собеседовали его.

Alister
15.05.2018
08:47:58
хаскелистов нада

Александр
15.05.2018
08:49:02

Alexander
15.05.2018
08:49:16
не Stack builders?

Александр
15.05.2018
08:49:21
Да, они

Google

Александр
15.05.2018
08:49:32
А что интересного про них можешь рассказать?

Владислав
15.05.2018
08:49:38
https://well-typed.com/blog/2018/03/haskell-development-job-with-well-typed
Интересно, у нас здесь есть люди, которые бы хотели заняться такой работой?

Alexander
15.05.2018
08:49:40
я бы дважды подумал перед тем как соглашаться

Александр
15.05.2018
08:49:54
Ну я пока и не соглашался.

Alexander
15.05.2018
08:50:18
@metaxis я к ним пытался устроиться, но в тот год взяли Бена Гамари

Andrei
15.05.2018
08:50:26
кстати фейсбук нанимает людей пилить GHC

Alexander
15.05.2018
08:50:39
учитывая они берут человека в год, шансов попасть мало
я попал в четверку лучших кандидатов тогда

Владислав
15.05.2018
08:51:10

Alexander
15.05.2018
08:51:28
у них самое классное интервью было из всех на которых я был

Aleksey
15.05.2018
08:51:30
Фейсбук ковровые бомбардировки устраивает походу - мне и в Linkedin написали и на почту (рекрутер какой-то) и на реддите вакансия

Владислав
15.05.2018
08:52:04
@qnikst А в этом году не хотите попробоваться?
Tuesday, 27 March 2018
Два месяца назад вакансия была.

Alexander
15.05.2018
08:52:11
нет :)

Владислав
15.05.2018
08:52:25

Alexander
15.05.2018
08:52:25
меня работа в Tweag устраивает более-менее
оно по irc :)
весьма интересная атмосфера
и задачка очень неожиданная, но подробности говорить не буду, т.к. они похоже не сильно её меняют
задачку - по ssh подключиться и разобраться в чем проблема и если получится поправить, причем програмка очень маленькая

Leonid
15.05.2018
08:54:35
это даже мрачнее чем whiteboard

Google

Alexander
15.05.2018
08:55:10
да ну, вообще класс

Andrei
15.05.2018
09:01:26

Ilya
15.05.2018
09:06:47
Вопрос по линзам. Как-то можно пройтись по всем сеттерам структуры, чтобы над каждым выполнить какое-то действие?
То есть для вот такой структуры
data Crowd a = Crowd {_first :: a, _second :: a, _third :: a} deriving Show
makeLenses ''Crowd
Я хочу поработать с чем-то типа Crowd (Lens' (Crowd a) a), то есть сразу со всеми сеттерами.
Вот минимальный пример, зачем это может понадобиться:
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE RankNTypes #-}
import Control.Lens
data Crowd a = Crowd {_first :: a, _second :: a, _third :: a} deriving Show
makeLenses ''Crowd
new :: Int -> Crowd Int -> Crowd (Crowd Int)
new x c = Crowd {_first = set first x c,
_second = set second x c,
_third = set third x c}
Хочется функцию new написать по-нормальному, не используя внутреннюю реализацию типа Crowd.
@kana_sama

kana
15.05.2018
09:08:09
... deriving Functor
fmap

Ilya
15.05.2018
09:08:37

Alexander
15.05.2018
09:09:09
(const x)

kana
15.05.2018
09:09:28
{-# LANGUAGE DerivingFunctor #-}
data Crowd a = Crowd
{ _first :: a
, _second :: a
, _third :: a
} deriving (Show, Functor)
makeLenses ''Crowd
new :: Int -> Crowd Int -> Crowd Int
new x = fmap (const x)

Ilya
15.05.2018
09:09:29
я имею в виду контейнер какой

kana
15.05.2018
09:10:15
а
я увидел

Alexander
15.05.2018
09:10:57
это уже Co* какие-то

kana
15.05.2018
09:11:04
в каждом поле поле у тебя копия Crowd с только этим изменным полем
да, выглядит как комонада какая-то

Alexander
15.05.2018
09:11:10
угу

Ilya
15.05.2018
09:11:29

kana
15.05.2018
09:12:22
ну все же не думаю, что в линзах есть что-то, что отдает список линз или линзу текущего поля во время траверса или что-то подобное
с generic такое написать можно наверное

Alexander
15.05.2018
09:13:20
я бы не парился и написал руками

Sergey
15.05.2018
09:14:32
uniplate стоит попробовать

kana
15.05.2018
09:14:47
fields :: [Lens (Crowd a) a]
fields = [first, second, third]
new x c = map (\field -> set field x c) fields

Google

Ilya
15.05.2018
09:15:14
я бы не парился и написал руками
руками не проблема написать, но позже тип Crowd будет не конкретный, в виде data Crowd :: * -> * (data family). А реализация new всё равно должна быть.
*Правда я ещё не разбирался с data family, но вроде это как раз то что нужно

Alexander
15.05.2018
09:15:34
тогда generic надо
а не линзы

Ilya
15.05.2018
09:16:16
generic-lens?

Alexander
15.05.2018
09:16:35
просто свой класс с generic
линзы зачем тут тебе?

Ilya
15.05.2018
09:17:10

Alexander
15.05.2018
09:17:12
который делаеть new :: Generic f => a -> f a -> f (f a)
зачем тебе set?

Ilya
15.05.2018
09:17:44

Alexander
15.05.2018
09:18:22
в общем самый простой способ - сделать класс:
class Duplicate f where
dup :: a -> f a -> [f a]
написал для кого надо руками, а потом сделать generic реализацию
хм.. с generic-lens наверное тоже можно

A64m
15.05.2018
09:20:46
лучше бы желающие изучить хаскель вместо теорката изучали его имплементацию, теребили бы всякие игрушечные стг-интерпретаторы
хоть понимали бы как ленивость работает
я не понял задачу про линзы

Alexander
15.05.2018
09:21:49
блин f (f a) выше конечно же

Ilya
15.05.2018
09:23:08
зачем тебе set?
set мне понадобился в функции forget. Вот код:
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE RankNTypes #-}
import Control.Lens
data Crowd a = Crowd {_first :: a, _second :: a, _third :: a} deriving Show
makeLenses ''Crowd
type Man = forall a. Lens' (Crowd a) a
new :: Int -> Crowd Int -> Crowd (Crowd Int)
new x c = Crowd {_first = set first x c,
_second = set second x c,
_third = set third x c}
forget :: (Enum a, Bounded a) => Man -> Crowd a -> [Crowd a]
forget man c = [set man x c | x <- [minBound .. maxBound]]
Пример работы:
λ> forget first (Crowd True True True)
[Crowd {_first = False, _second = True, _third = True},Crowd {_first = True, _second = True, _third = True}]
Функция new более сложная, и там внутри должен использоваться forget

Alexander
15.05.2018
09:23:36
я не понимаю смысла forget

Leonid
15.05.2018
09:23:43
https://www.youtube.com/watch?v=a7R-2vtPLDM
комитетчики осваивают медийное пространство для ведения войны

Alexander
15.05.2018
09:24:00
и не вижу зачем там set прям обязательно