@haskellru

Страница 729 из 1551
Alexander
07.01.2018
20:19:44
ничем не хуже yaml

а местами и получше

@kana_sama какие проблемы у .cabal?

как у формата

Google
kana
07.01.2018
20:25:50
ну меня "удивляло" всегда отсутствие какой-либо явной логики в необходимости ставить запятую в разных списках

Alexander
07.01.2018
20:27:04
ставь везде

оно так работает

вообще там обязательно её ставить в зависимостях, т.к. без , могут быть сложности с парсеньем

Alister
07.01.2018
20:30:33
стоит ставит stack?

или есть лучшие способы менеджмента хаскель-проектов?

Andrei
07.01.2018
20:31:21
Alexander
07.01.2018
20:32:30
stack проще особенно для начала

конечно в последнее время он нифига не развивается, там проявляется куча багов, но интерфейс гораздо более простой и понятный

чаще выполняется принцип of the least surprise

Alister
07.01.2018
20:34:18
а есть что на подходе?

Alexander
07.01.2018
20:35:08
нет

cabal-install есть ещё

Google
Alexander
07.01.2018
20:35:26
он сейчас пошустрее развивается и там больше фич

Alexander
07.01.2018
20:35:51
но там инопланетянский интерфейс

Антон
07.01.2018
20:36:36
cabal-install есть ещё
А что, проблему cabal hell уже решили?

Arseniy
07.01.2018
20:36:47
Да

В 2.0

Alexander
07.01.2018
20:37:02
её решили лет я даже не знаю сколько назад

Arseniy
07.01.2018
20:37:23
(при помощи nix :peka:)

Alexander
07.01.2018
20:37:37
у меня в генте её и не было, на nix её не было, в cabal-dev её не было, с cabal sandbox её не было, в cabal-2.0 вообще хорошо

cabal-dev появился, когда я ещё начинал haskell-ем увлекаться, в cabal-install оно тоже уже лет 5 как приехало

ну как не было, можно было получить cabal hell, но если делать глупости

типа все ставить через cabal install в глобально

A64m
07.01.2018
20:39:35
с сендбоксами только замучаешься компилировать

уж начинающий с 256 игрушечными проектами точно устанет линзы компилировать

Антон
07.01.2018
20:44:22
Линзы не нужны, геттеров с префиксами достаточно :yoba:

Alexander
07.01.2018
20:46:06
можно ж шарить было сендбоксы

A64m
07.01.2018
20:46:35
да, для этого и костыли были специальные, но не начинающему.

Alexander
07.01.2018
20:46:56
ну да, у стека более человеческий апи и был и остаётся

A64m
07.01.2018
20:47:22
тому надо и так 10 раз через обруч прыгнуть чтоб сендбокс заработал, а не из глобальной базы все было

Alister
07.01.2018
20:50:23
ну я уже с питоном и его пипами игрался

Google
Alister
07.01.2018
20:51:31
там вообще экосистема фрагментирована и есть два бандлера, один из которых даже не трекает зависимости при удалении пакетов а также не имеет нормальных билд тулов, а второй для соентистов и тянет дофига ненужной мишуры

Alexander
07.01.2018
21:03:34
ну тет хотя бы механизм внутри один

*тут

стек его правда руками немного по другому использует

Sergey
07.01.2018
21:38:50
(надеюсь это была не контрольная в универе..)
Нет, это была не контрольная, это одна из домашек по ФП, я по-своему решил, если что) мне очень помогла функция repicateM за нее еще раз спасибо

Alexander
07.01.2018
21:55:12
ну хоть по своему :)

я там выше ошибся немного, у меня как-то так получилось: import Data.List import Control.Monad solve n = id $ length $ filter and $ filter (not.null) $ map (\t -> zipWith3 (\a b c -> not a || not b || c) t (drop 1 t) (drop 2 t)) $ replicateM n [True,False]

вроде даже лишнего не должно аллоцироваться особо

а не, аллоцирует :/

на -O0

Sergey
07.01.2018
22:13:46
я потом обязательно погляжу решение) потому что мое подлиннее вроде вышло) countSolution :: Int -> Int countSolution n | n < 3 = error "n must be >= 3" | otherwise = length [solve | solve <- replicateM n [True, False], isSolve solve] isSolve :: [Bool] -> Bool isSolve (x:y:z:xs) | null xs = boolResult | otherwise = boolResult && isSolve (y:z:xs) where boolResult = not x || not y || z я на haskell всего неделю прогаю, полегче только благодаря прологу)

A64m
08.01.2018
08:42:39
ФЯ 90-х | comp | VM | t | | --------------------- | --------------- | ------ | | ghc 8.2.2 (O2) llvm 6 | stg ghc x64 | 7 | | clean | abc | 40 | | ocaml 4.04 flambda O3 | | 72 | против ФЯ 2010-х | idris 0.99 | | 54308 | | purescript 0.11.4 | node v7.10.0 V8 | 128369 |

A64m
08.01.2018
08:43:34
поразительный прогресс в избегании успеха, конечно

Aleksey
08.01.2018
09:08:02
а что за t ?

A64m
08.01.2018
09:08:20
время в секундах

kana
08.01.2018
09:08:21
количество секунд

результат паразительный конечно

A64m
08.01.2018
09:09:42
я когда начал разные имплементации ФЯ бенчмаркать, думал разница будет порядка три. К такому меня жизнь не готовила

sherzod
08.01.2018
09:46:13
а что это за бенчмарк?

в целом это же объяснимо (хотя нисколько не умаляет поразительности и грусти по этому поводу) пока есть возможность идём экстенсивным путём, это привело к смещению фокуса на архитектуру, простоту разработки, поддержки и масштабирования, и уходу фокуса с вычислительной эффективности. Теперь когда есть мощные компы. много памяти и гор. масштабирование, вычислительная эффективность - нишевая область определённых библиотек и движков.

Google
Kir
08.01.2018
09:49:48
Интересно, что окамл в 10 раз медленнее хаскелл оказался

A64m
08.01.2018
10:05:43
Интересно, что окамл в 10 раз медленнее хаскелл оказался
во первых, там авторы библиотеки ленивых списков чего-то перемудрили, я писал "наивный" код который где-то в два раза быстрее. Во вторых фьюжена нету, но и без фьюжена хаскель будет 20, мои ленивые списки на окамле 40, разница в два раза остающаяся - простая имплементация ленивости в окамле против СТГ. Так что тут все понятно более-менее

с идрисом тоже понятно, там Lazy не записывает вычисления а перевычисляет всякий раз заново, так что там асимптотика хуже

но это не случай пурскрипта. там лази как в окамле, а не как в идрисе: exports.defer = function () { function Defer(thunk) { if (this instanceof Defer) { this.thunk = thunk; return this; } else { return new Defer(thunk); } } Defer.prototype.force = function () { var value = this.thunk(); this.thunk = null; this.force = function () { return value; }; return value; }; return Defer; }();

надо будет на пурскрипте наивную имплементацию написать

а что это за бенчмарк?
primes = 2:3:filter isPrime [5,7..] :: [Int] isPrime x = all (/= 0) . map (rem x) . takeWhile ((<= x) . (^2)) $ primes main = print . length . takeWhile (<= 2^24) $ primes

Konstantin
08.01.2018
10:18:33
ох уж эти синтетические бенчмарки

A64m
08.01.2018
10:21:15
у синтетического бенчмарка обычно как раз другие проблемы: для всех статтипизированных результаты одинаковые, си в три раза быстрее, скрипты в 10 раз медленее

Admin
ERROR: S client not available

A64m
08.01.2018
10:21:39
тут ФЯ в разы и на порядки отличаются и главное обычно понятно почему

Alexander
08.01.2018
11:29:02
как в этом вашем стеке сделать cabal init?

Yuriy
08.01.2018
11:30:42
я делаю так: > package.yaml

Alexander
08.01.2018
11:31:03
sh-4.4$ cabal init cabal: Use of GHC's environment variable GHC_PACKAGE_PATH is incompatible with Cabal. Use the flag --package-db to specify a package database (it can be used multiple times).

@cblp_su и что оно зависимости с все other-extensions оно за тебя заполняет:

?

Yuriy
08.01.2018
11:32:07
нет, это stack init, наверное, делает

зависимости я руками заполняю. зачем это автоматизировать?

Alexander
08.01.2018
11:33:41
stack init ничего не делает

оно ругается что stack init сделан выше

зависимости я руками заполняю. зачем это автоматизировать?
за тем, что я не хочу руками выписывать все пакеты откуда у меня импортированы модули

Google
Alexander
08.01.2018
11:34:42
и я хочу это автоматизировать, руками я только если границы потом прописывать буду

и вообще как пользователи hpack могут спрашивать зачем что-то автоматизировать

если пользуешься системой, которая автоматизирует все подряд (типа exposed/other-modules выписывания), то вопрос почему кто-то хочет что-то автоматизировать возникать не должен

хочет и все

Yuriy
08.01.2018
11:36:12
вообще, в stack script есть гадалка по пакетам, но не уверен, что они её вроде ещё не встроили в другие места

а cabal init уже умеет гадать на пакетах?

Alexander
08.01.2018
11:36:32
поидее stack exec --no-ghc-package-path -- cabal init should work

гадать по пакетам? уже очень давно умеет смотреть в ghcpkg в из каких пакетов модуль

и вставлять это в build-dependencies

в общем-то это даже ghc умеет делать, т.к. ему это нужно чтобы ghci/ghc работало

гадать на пакетах

Yuriy
08.01.2018
11:37:54
один модуль может быть в разных пакетах

Alexander
08.01.2018
11:38:04
вспомни что делает ghc в этом случае

Yuriy
08.01.2018
11:38:19
у тебя локально есть список модулей со всего хакаджа?

Alexander
08.01.2018
11:38:27
ты мне хочешь доказать что автоматизация плохо?

не трать время

я считаю, что хорошо, а corner cases я разрулю руками

Yuriy
08.01.2018
11:38:42
ок

согласен

Alexander
08.01.2018
11:39:12
неа

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