Alexander
т.е. нету неявного параметра для типа
Alexander
это как с let x = 5, sprint x x = _, и let x = 5 ::Int sprint x x = 5
parket
undefined это _|_, не?
Leonid 🦇
особенности реализации? надо компилять в корку без оптимизашек и там понятно будет
Danila Matveev
Prelude> let x = (Just 4, False) Prelude> :sprint x x = (Just 4,False)
Prelude> let x = (Just 4, False) Prelude> :sprint x x = _
Leonid 🦇
(True, undefined) :: forall a . (Bool, a) (True, undefined::Int) :: (Bool, Int)может просто в первом случае ему не хватает "пустой дикт"?
Alexander
@optician_owl у тебя 4 это функция я поэтому Bool и использую
Leonid 🦇
(,) True _ - это thunk с конструктором. а (True, _) - слабая голова
Alexander
Prelude> let x = (Just (+(1::Int)), False) Prelude> :sprint x x = (Just _,False)
Alexander
ну не thunk, а ap
Leonid 🦇
ну да
Alexander
ладно лучше дальше работать буду
Alexander
Leonid в общем-то тогда (Int,undefined::Int) и (Bool, Bool) сходятся
Alexander
но какого черта он сразу whnf делает
Alexander
там же код это let a = .. ; b = .. in (,) a b
Alexander
жалко sprint thunk от функции не отличает
Leonid 🦇
Whnf потому что CAF?
Alexander
возможно
Michel
/me зашел после js-работы в хачкель-чат, думал чего умного почитать, а там тоже undefined и жопа в вычислениях
Anonymous
undefined это функция
Vladislav
undefined is not a function
Dmitry
а какой сейчас последний ghc в nix ?
Anonymous
А кто-нибудь уже пользовал compact regions?
Vladislav
Я с ними экспериментировал. Они работают.
Vladislav
Но фатальный недостаток в том, что в компактный регион не могут входить функции.
Anonymous
Такой уж ли фатальный?
Vladislav
Ну если у тебя в данных функций нет, то не такой уж.
Alexander
@cblp_su сомнительно, особенно в ghci
Vladislav
Самое кайфовое, что можно на диск дампать структуры бесконечные, вроде xs = 1:xs
Vladislav
Оно умеет шейринг сохранять
Anonymous
Я просто сейчас не оч втыкаю как с ними работать.) То есть вот есть компактный регион(compact b) ты к нему прибавил что-то типа a и получил IO (compact a)
Anonymous
Как оттуда теперь получить при необходимости объект b?)
Vladislav
Как оттуда теперь получить при необходимости объект b?)
Я может не понимаю вопрос, но есть же getCompact?
Anonymous
Ну, ты получишь корневой объект типа a
Anonymous
А я хочу тот, который раньше был корневым - типа b
Vladislav
Так у тебя же остался старый Compact b.
Vladislav
К тому же ты можешь добавить (a, b) и получить Compact (a, b)
Anonymous
Ну это понятно
Anonymous
Я просто думал, что есть возможность брать из региона некорневой объект)
Anonymous
Ну, не страшно)
Vladislav
Я не совсем понимаю идею корневого объекта. Если я сделаю compactAdd, то у меня будет Compact a и Compact b, а регион один.
Vladislav
Так что доставать я могу любой из объектов из одного компакта.
Anonymous
На счет функций - у меня в них хранится меньшая часть данных. Можно пренебречь.
Anonymous
Да, понял.
Anonymous
Я почему то думал, что Compact b использовать уже нельзя)
Anonymous
Спасибо!
Alexander
если уж совсем хочется функции, то можно использовать distributed-closure или distributed-static
Alexander
и страдать с ними
Alexander
мне обидно, что компакты не падали в compile time если там mutable bytearray внутри
Alexander
а падали в runtime
Alexander
и то, что все же с ними все равно нельзя в shared memory
Alexander
точнее все сериализации десериализации останутся, только дешевле будут
Anonymous
Ну вообще изначально хотели сделать тайпкласс Compactable, но чет забили
Anonymous
Имхо зря
Dmitry
кто-то знает способ заставить cabal в Setup.hs выполнять какой-то код всегда, вне зависимости от того, менялись файлы проекта или нет - или может, в .cabal можно воткнуть нехаскельные зависимости, что бы он их трекал?
Dmitry
@qnikst ?
Arseniy
Сделайте скрипт просто на баше?
Bohdan
Каким пакетом хорошо CLI-аргументы парсить? Попробовал HFlags, выглядит вкусно, но он для какого-то TemplateHaskell оказался; uu-flags пойдёт? Желательно, чтобы сразу ключи читало, то есть не тупо список строк
Anatolii
Optparse applicative
Alexander
optparse-applicative +1
Dmitry
hpack + Setup.hs FTW: extra-source-files: - frontend/src/*.elm - static/*.js main = DS.defaultMainWithHooks DS.simpleUserHooks{buildHook = buildHook'}
Dmitry
скрипт просто на баше это уныло
Dmitry
т.е оно может трекать нехаскельные зависимости
Dmitry
cabal вроде бы тоже так умеет. так что вот.
Cheese
hpack тут причем? он же просто кабалфайл генерит
Anonymous
считается ли возвращение _|_ сайд эффектом?
adam
считается ли возвращение _|_ сайд эффектом?
Кажется, что ты не понимаешь зачем хаскеллю вообще понадобился undefined undefined :: a undefined = error "Prelude.undefined"
кана
Вроде как тут говорили, что да, является Ну и действия от него вполне тянут на сайд-эффект - терминация программы
Ilya
Вроде как тут говорили, что да, является Ну и действия от него вполне тянут на сайд-эффект - терминация программы
А можно сказать, что все вычисления в Haskell подразумевают чистые вычисления, завёрнутые в монаду MaybeU a = JustU a | undefined ?
Cheese
аварийное завершение программы считается ошибкой, отстутствием правильного завершения, а не побочным эффектом
Ilya
аварийное завершение программы считается ошибкой, отстутствием правильного завершения, а не побочным эффектом
понятно. просто если сайд-эффект, значит должна быть какая-то монада, вот я и предположил. а если не сайд-эффект, то конечно
Cheese
побочные эффекты неплохо кодируются аппликативами и разными другими штуками
Alexander
побочные эффекты кодируются структурой данных
Alexander
а аппликейтив оно или монад или просто ыунктор это другой вопрос