@haskellru

Страница 1506 из 1551
Terminator
09.10.2018
15:00:36
@AnnSotnik будет жить. Поприветствуем!

Ann
09.10.2018
15:00:52
Горьковский автомобильный завод приглашает принять участие в масштабном GAZ Tech хакатоне! ГАЗ впервые проводит хакатон для IT-специалистов, способных предложить лучшие решения в сфере информационных технологий и автоматизации бизнес-процессов в области автомобилестроения. Призовой фонд хакатона - 135 000 рублей и возможность стать частью команды ГАЗа. GAZ Tech хакатон пройдет в два этапа: Отборочный этап продлится до 18 октября (23:59 по Мск). Финал хакатона пройдет 20-21 октября на территории ГАЗа в Нижнем Новгороде. К участию приглашаются программисты и разработчики, дизайнеры, команды разработчиков, а также все заинтересованные в развитии современных технологий в автомобилестроении. Участие бесплатное, необходима предварительная регистрация на официальном сайте http://hackathon.gaz.ru

Dmitry
09.10.2018
15:01:53
на хаскелле писать на этом хакатоне можно, @AnnSotnik ?

Александр
09.10.2018
15:02:27
Правильный вопрос - на Хаскелле после попадания в ГАЗ писать можно?

Google
Dmitry
09.10.2018
15:03:26
а зачем попадать в Газ ?

Александр
09.10.2018
15:04:02
В таком случае, зачем вообще в хакатоне участвовать?

Dmitry
09.10.2018
15:04:28
@AnnSotnik - мы очень ждём ответа, если мы его не дождемся, у нас может сложиться впечатление, что вы с нами не общаетесь, а нам рассылаете

Ann
09.10.2018
15:06:15
на хаскелле писать на этом хакатоне можно, @AnnSotnik ?
На хакатоне можно писать на любом языке

Dmitry
09.10.2018
15:06:28
?

Jentry
09.10.2018
15:20:38
Горьковский автомобильный завод приглашает принять участие в масштабном GAZ Tech хакатоне! ГАЗ впервые проводит хакатон для IT-специалистов, способных предложить лучшие решения в сфере информационных технологий и автоматизации бизнес-процессов в области автомобилестроения. Призовой фонд хакатона - 135 000 рублей и возможность стать частью команды ГАЗа. GAZ Tech хакатон пройдет в два этапа: Отборочный этап продлится до 18 октября (23:59 по Мск). Финал хакатона пройдет 20-21 октября на территории ГАЗа в Нижнем Новгороде. К участию приглашаются программисты и разработчики, дизайнеры, команды разработчиков, а также все заинтересованные в развитии современных технологий в автомобилестроении. Участие бесплатное, необходима предварительная регистрация на официальном сайте http://hackathon.gaz.ru
Стать частью команды газа это какое-то особое наказание?

Ann
09.10.2018
15:27:14
Ахаахаха Ну кому как)

Yuriy
09.10.2018
15:32:06
Стать частью команды газа это какое-то особое наказание?
как "команда — часть корабля" в фильме про пиратов?

Aleksey
09.10.2018
15:37:59


Ilya
09.10.2018
15:44:57
Всем привет. Ставил Haskell Platform отсюда https://www.haskell.org/downloads , а затем поставил stack. И теперь stack ghci работает, как ожидается, а в ghci получаю такую ошибку: > 1 * 2 <interactive>:1:3: error: Variable not in scope: (*) :: integer-gmp-1.0.2.0:GHC.Integer.Type.Integer -> integer-gmp-1.0.2.0:GHC.Integer.Type.Integer -> t Не подскажете, в чем причина? Нагуглить не удалось пока что

Такое ощущение, что модули, которые по умолчанию были подключены, сейчас отсутствуют

Yuriy
09.10.2018
15:51:20
запускаете в каталоге с проектом?

как будто Prelude не импортировался или base не нашлась

Google
Ilya
09.10.2018
16:00:12
как будто Prelude не импортировался или base не нашлась
Запускаю не в каталоге с проектом. :l Prelude выдает такую ошибку: > :l Prelude <no location info>: error: module ‘Prelude’ cannot be found locally Failed, no modules loaded.

Yuriy
09.10.2018
16:00:55
:load вообще для другого

попробуйте import Prelude

:load вообще для другого
:load загружает файлы-модули, а не модули из пакетов. для модулей из пакетов есть import и :module

David
09.10.2018
17:32:27
stack идет вместе с Haskell Platform. Ставится автоматически со вторым вместе

Лучше было отдельно не ставить

Ilya
09.10.2018
18:02:11
Лучше было отдельно не ставить
Это верно. Ставил сначала просто платформу погонять, но потом stack понадобился. >для модулей из пакетов есть import и :module Попробую завтра, на этом пк такая ошибка не воспроизводится, спасибо

A64m
09.10.2018
18:57:55
новая эра продлилась недолго https://github.com/ghc/ghc/commit/d728c3c578cc9e9205def2c1e96934487b364b7b

Abbath
09.10.2018
19:06:20
Как нет регистров?

Собрал таки свой проект

Завендорил телеграм апи

kana
10.10.2018
05:51:43
{-# LANGUAGE DataKinds, PolyKinds, TypeOperators #-} import Data.IORef class IFunctor f where imap :: (a -> b) -> (f i j a -> f i j b) class IFunctor f => IPointed f where ipure :: a -> f i i a class IPointed f => IApplicative f where iap :: f i j (a -> b) -> (f j k a -> f i k b) class IApplicative f => IMonad f where ijoin :: f i j (f j k a) -> f i k a ibind :: IMonad f => f i j a -> (a -> f j k b) -> f i k b ibind m f = ijoin . imap f $ m newtype IIO c1 c2 a = IIO (IO a) instance IFunctor IIO where imap f (IIO m) = IIO (fmap f m) instance IPointed IIO where ipure x = IIO (pure x) instance IApplicative IIO where iap (IIO mf) (IIO mx) = IIO (mf <*> mx) instance IMonad IIO where ijoin (IIO m) = IIO (m >>= \(IIO n) -> n) newtype IIORef i a = IIORef (IORef a) runIIO :: IIO '[] '[] a -> IO a runIIO (IIO m) = m newRef :: a -> IIO is (i : is) (IIORef i a) newRef = IIO . fmap IIORef . newIORef freeRef :: IIORef i a -> IIO (i : is) is () freeRef _ = IIO (pure ()) writeRef :: IIORef i a -> a -> IIO (i : is) (i : is) () writeRef (IIORef ref) = IIO . writeIORef ref readRef :: IIORef i a -> IIO (i : is) (i : is) a readRef (IIORef ref) = IIO (readIORef ref) lift :: IO a -> IIO i i a lift = IIO program = newRef 10 `ibind` \a -> newRef "hello" `ibind` \b -> readRef a `ibind` \x -> readRef b `ibind` \y -> lift (print x) `ibind` \_ -> freeRef b `ibind` \_ -> freeRef a `ibind` \_ -> ipure $ x + length y main = runIIO program >>= print

хм, вообще это не работает

нужен способ генерить уникальные индексы на тайплевеле

https://gist.github.com/kana-sama/2134f4b1793422865284fbd2c063a5df

вроде бы если при read убирать индекс из контекста, получится что-то вроде линейщины

Oleg
10.10.2018
06:29:07
Это по мотивам blah?

kana
10.10.2018
06:29:27
да

Oleg
10.10.2018
06:30:34
Что-то вроде линейщины вряд ли получится. Для этого нужно иметь по паре контекстов-индексов и уметь их сплиттить /склеивать

Хотя может и одного хватит

Google
Oleg
10.10.2018
06:34:15
https://gist.github.com/kana-sama/2134f4b1793422865284fbd2c063a5df
Ну и максимум здесь неверный подход. Если из индеса будет удалена последняя переменная, а ссылку на неё припрячут. То после выделения новой переменной, можно будет незаконно использовать припрятанную, ведь номера у них будут одинаковые. Нужен монотонно инкрементируемый счётчик

Александр
10.10.2018
06:42:03
Что это? Для чего?

Почему на тайп левеле?

Oleg
10.10.2018
06:45:16
Ну вот надо не только писать в blah но и иногда читать его

Александр
10.10.2018
06:45:50
Среди вашего флуда про квантмех трудно найти что-то полезное

Oleg
10.10.2018
06:46:00
Ну вот как раз после них

Исходные рассуждения Вершилова и А64 были про компакты, которые можно транспортить, не копируя, если известно, что ссылок на них нет. Я что-то вбросил про Идрис и Вершилов сказал, что можно и индексед монадкой справиться

Александр
10.10.2018
06:47:22
А, ясно, академщина

Oleg
10.10.2018
06:47:58
Ну как, рассуждения (не мои) были по мотивам продового перфоманса

Не знаю, какая тут академщина. Жиза

Abbath
10.10.2018
07:10:30
hie не умеет в new-build

Но мне это и не нужно, буду как кметт, ручками все писать

Alexander
10.10.2018
07:16:39
поидее там нужно что-то вроде RankN не знаю как правильно сработает попозже попытаюсь сделать (но это не точно)

@graninas суть простая, в расте можно добиться большей безопасности работы с ресурсами и убрать use after frwet

free

а у нас можно только регионами, которые не позволяют early free, которые (апстримовые) не работают с конкурентностью

Александр
10.10.2018
07:18:47
Ну, я такое могу сделать тоже. На фри монадах, ясное дело

Alexander
10.10.2018
07:18:48
вопрос в том можно ли в текущем сеттинге добиться похожего в сабже

не можешь конечно

Александр
10.10.2018
07:19:12
Могу

Google
Alexander
10.10.2018
07:19:24
как у них с rank2?

rankn

без них ты не сможешь сделать защиту на typelevel

и тебе нужны будут индексированные монадки

Александр
10.10.2018
07:20:08
Зачем на тайп левеле? Достаточно в рантайме

Alexander
10.10.2018
07:20:13
нет

в рантайме любой дурак может завернув ресурс в мварь

без прямого доступа

Александр
10.10.2018
07:20:54
Почему нет? Зачем усложнять? Во всех промышленных языках в рантайме делается

Alexander
10.10.2018
07:21:15
я вроде начал с описания ситуации?

Александр
10.10.2018
07:21:22
Мварь тоже помодет, да

Alexander
10.10.2018
07:21:23
в расте не в рантаймк

Александр
10.10.2018
07:21:47
Ну и молодец, rust. Хорошо придумал

Alexander
10.10.2018
07:22:39
да, там линейные типы хорошо легли

Александр
10.10.2018
07:25:33
Ну хорошо, если будет в Хаскеле. Но если надо ехать, а не шашечки, то просто надо брать и использовать кондовые практики. Они, по крайней мере, всем знакомы, и их accidental complexity не высокая.

Abbath
10.10.2018
07:26:03
fizruk здесь есть?

Anatolii
10.10.2018
07:26:19
он быстрее в gitter ответит

я его там находил

kana
10.10.2018
07:27:18
{-# LANGUAGE DataKinds, PolyKinds, TypeOperators, TypeFamilies , UndecidableInstances, ConstraintKinds #-} import GHC.TypeLits import Data.IORef type family Elem' x xs where Elem' x '[] = False Elem' x (x : xs) = True Elem' x (y : xs) = Elem' x xs type Elem x xs = Elem' x xs ~ True type family Without x xs where Without x '[] = '[] Without x (x : xs) = Without x xs Without x (y : ys) = y : Without x ys class IFunctor f where imap :: (a -> b) -> (f i j a -> f i j b) class IFunctor f => IPointed f where ipure :: a -> f i i a class IPointed f => IApplicative f where iap :: f i j (a -> b) -> (f j k a -> f i k b) class IApplicative f => IMonad f where ijoin :: f i j (f j k a) -> f i k a ibind :: IMonad f => f i j a -> (a -> f j k b) -> f i k b ibind m f = ijoin . imap f $ m data IIOState = IIOState [Nat] Nat newtype IIO (p :: IIOState) (n :: IIOState) a = IIO (IO a) instance IFunctor IIO where imap f (IIO m) = IIO (fmap f m) instance IPointed IIO where ipure x = IIO (pure x) instance IApplicative IIO where iap (IIO mf) (IIO mx) = IIO (mf <*> mx) instance IMonad IIO where ijoin (IIO m) = IIO (m >>= \(IIO n) -> n) newtype IIORef i a = IIORef (IORef a) runIIO :: IIO ('IIOState '[] n) ('IIOState '[] m) a -> IO a runIIO (IIO m) = m newRef :: a -> IIO ('IIOState is n) ('IIOState (n : is) (1 + n)) (IIORef n a) newRef val = IIO (IIORef <$> newIORef val) freeRef :: Elem i is => IIORef i a -> IIO ('IIOState is n) ('IIOState (Without i is) n) () freeRef _ = IIO (pure ()) writeRef :: Elem i is => IIORef i a -> a -> IIO ('IIOState is n) ('IIOState is n) () writeRef (IIORef ref) val = IIO (writeIORef ref val) readRef :: Elem i is => IIORef i a -> IIO ('IIOState is n) ('IIOState is n) a readRef (IIORef ref) = IIO (readIORef ref) lift :: IO a -> IIO i i a lift = IIO program :: IIO ('IIOState '[] 0) ('IIOState '[] 2) Int program = newRef 10 `ibind` \a -> newRef "hello" `ibind` \b -> readRef a `ibind` \x -> readRef b `ibind` \y -> writeRef a 20 `ibind` \_ -> lift (print x) `ibind` \_ -> lift (print y) `ibind` \_ -> readRef a `ibind` \x -> freeRef a `ibind` \_ -> freeRef b `ibind` \_ -> ipure $ x + length y main = runIIO program >>= print

Google
kana
10.10.2018
07:28:14
если спрятать и получится, то использовать - нет, но только в пределах одного блока, нужно RankN как-то впилить

например смещать на неизвестный n все индексы

зря удалил, type family Elem' x xs where Elem' x '[] = False Elem' x (x : xs) = True Elem' x (y : xs) = Elem' x xs type Elem x xs = Elem' x xs ~ True type family Without x xs where Without x '[] = '[] Without x (x : xs) = Without x xs Without x (y : ys) = y : Without x ys Couldn't match type ‘Elem' (1 + n) (Without n '[1 + n, n])’ with ‘'True’ почему не может посчитать?

Alexander
10.10.2018
07:33:52
в расте не в рантаймк
Тут важно то, что у раста ещё и гц нет. А если захочется его прикрутить к чему-то, то надо явно передавать владение чем-то гц.

Alexander
10.10.2018
07:35:45
угу

kana
10.10.2018
07:36:09
Couldn't match type ‘n + 2’ with ‘(n + 1) + 1’ как и 2 + n with 1 + (1 + n)

Alexander
10.10.2018
07:43:15
там плагины надо или аскиомы через unsafeCoercr

Ilya
10.10.2018
07:45:25
попробуйте import Prelude
> :m Prelude <no location info>: error: Ambiguous module name ‘Prelude’: it was found in multiple packages: base-4.11.1.0 summoner-1.1.0.1 Хм, возможно, дело в том, что ghci сам не смог разрешить эту неопределенность. Но stack ghci может. Дальше я сделал так: $ ghc-pkg unregister summoner ignoring (possibly broken) abi-depends field for packages После чего ghci заработал, как ожидается. Но такие конфликты могут, наверное, возникнуть и в будущем. Возможно ли их избежать превентивно?

kana
10.10.2018
07:45:45
в принципе это не нужно, достаточно просто добавить еще один фантом

https://gist.github.com/kana-sama/20086dacb9a29bd10b041660a166d6f9

теперь рефы не убегут из скоупа (вниз тоже), и все новые рефы имеют уникальный айди

Страница 1506 из 1551