
Евгений
14.04.2018
08:00:38
В "коде" не должно быть лигатур, ибо это редактор с их поддержкой а приори будет тормозить

Yuuri
14.04.2018
08:01:05
Ну и до кучи, какое свойство кода нарушают лигатуры? Он компилироваться перестаёт или что?

Google

Евгений
14.04.2018
08:04:46
Потому что за о(1) быстрее чем за о(n*ln n)?

Yuuri
14.04.2018
08:05:50
Ну и ещё одно религиозное чувство оскорблю: кодошрифт вообще не обязан быть моноширинным. Доказано книжками Бёрда, например.

Евгений
14.04.2018
08:11:23

Leonid
14.04.2018
08:18:42
Зануды...

Yuuri
14.04.2018
08:30:28
Он первый начал!
Ладно, вернусь в онтоп: стряхивал пыль со старого кода времён до monad proposal и обнаружил ошибку компиляции из-за того, что forM сотоварищи теперь работают с любыми Traversable. Можно ему скормить конкретный инстанс, не прописывай весь тип целиком? Ну и без
oldForM = forM :: [a] -> <...>
use `oldForM` luke
Смутно помнится какое-то расширение с @-нотацией

kana
14.04.2018
08:47:50
TypeApplications

Yuuri
14.04.2018
08:50:17
Спасибо

Vladimir
14.04.2018
08:51:54
Да ладно, к type classes прикрутили явную аппликацию? Их вроде не для того делали ;)

Google

Denis
14.04.2018
08:52:20
это не связано с type classes

kana
14.04.2018
08:52:34
не к тайпклассам
forM :: forall t m a b. ... => ...

Denis
14.04.2018
08:53:59
Есть такое увтерждение, что для любого сколь-нибудь серьёзного Хаскельного проекта (или проектов) нужно держать свою кастомную Prelude. И вокруг этого утверждения идут горячие споры, кто-то всецело за свою Prelude, кто-то, напротив, говорит, что это лишняя работа, которая усложнит вход в проект.
Что думаете? Есть смысл в своей Prelude?

Denis
14.04.2018
08:54:50
не держим, брат жив
чуть больше импортов копипастить

Alexander
14.04.2018
08:55:15
кастомная прелюда зло
но если лень писать импрты и есть много лишнего времени на её поддержку то можно
может повысить качество кода и его однородность

Denis
14.04.2018
08:55:58
я сам тоже не очень люблю кастомность в этом вопросе

Alexander
14.04.2018
08:56:06
особенно для новичков (которые умеют читать код рядом, я не копипастить со стековерфлоу)

Denis
14.04.2018
08:56:10
я бы сказал что если очень аккуратно подойти, то можно
но не нужно
и сколько у вас в твиге новичков и откуда инфа?!

kana
14.04.2018
08:57:38
абсолютно противоположная альтернатива - не использовать никаких прелюдий вообще, импортить вообще все и квалифицированно/явно

Denis
14.04.2018
08:59:09
содом какой-то предлагаете

Denis
14.04.2018
08:59:22

Alexander
14.04.2018
09:00:29
а блин я ещё опять base/prelude путаю

Denis
14.04.2018
09:01:32
а они связаны неразрывно энивей

Google

kana
14.04.2018
09:03:12

Denis
14.04.2018
09:03:40

Alexander
14.04.2018
09:10:08
постмортем по инфраструктуре уже был?

Yuuri
14.04.2018
09:10:11
а они связаны неразрывно энивей
Прелюдия и база - основные орудия,
Кто крепче них неразрывно связан?
Говорим "база" - подразумеваем "прелюдия",
Говорим "прелюдия" - подразумеваем "база"!

A64m
14.04.2018
09:38:00
еще одну фичу вмерджили, которую в 8.4 не смогли, потому что 8.0 не компилировал этот код. Все же глюкавость у 8.0 была выше гхц-ной нормы

Alexander
14.04.2018
10:05:42
это все стек виноват
сами придумайте почему
но это точно

Leonid
14.04.2018
10:30:20

Alexander
14.04.2018
10:32:21
кстати при каком ghc стек то появился?

Leonid
14.04.2018
10:42:28
7.8 или 7.10

Alexander
14.04.2018
10:42:43
тогда все сходится

Denis
14.04.2018
10:52:34
Друзья, а напомните пожалуйста, как сделать так, чтобы при использовании undefined вылетало предупреждение?

Alexander
14.04.2018
10:59:46
определить свой undefined?
c {-# Warning "undefined" "bla" #-}
или использовать дырки вместо undefined
или hlint натравливать

Denis
14.04.2018
11:03:10
ок, спасибо

Дмитрий
14.04.2018
11:40:25
У меня вопрос, вот допустим, я хочу из хаскеля создать мягкую ссылку на файл/диркторию. Или изменить то, куда ссылается существующая ссылка, как я могу это сделать?
Кроме того, интересует возможность сравнения двух ссылок (ссылки равны, если ссылаются на один и тот же файл), за ранее благодарю.

kana
14.04.2018
11:43:16
сделать легко: https://hackage.haskell.org/package/unix-2.7.2.2/docs/System-Posix-Files.html#g:9
#!/usr/bin/env stack
{- stack
--resolver lts-11.1
--install-ghc runghc
--package base
--package unix
-}
import Control.Applicative (liftA2)
import System.Posix.Files (createSymbolicLink, readSymbolicLink)
main :: IO ()
main = do
writeFile "1" "hello"
createSymbolicLink "1" "1_1"
createSymbolicLink "1" "1_2"
print =<< liftA2 (==)
(readSymbolicLink "1_1")
(readSymbolicLink "1_2")

Google

kana
14.04.2018
11:43:46
сравнить тоже легко - следующая функция

Дмитрий
14.04.2018
11:46:42
Ага, благодарю, это ровно то, что мне нужно!
А если я хочу потом содержимое этой ссылки открыть в какой-то программе, чем мне это лучше сделать. На ум приходит только шелли...

kana
14.04.2018
11:51:27
под содержимым ссылки ты понимаешь путь до файла, на который ссылается, или содержимое файла, на который ссылается?

Дмитрий
14.04.2018
11:52:12
Под содержимым ссылки я подразумеваю файл.
Допустим, я хочу открыть картинку в просмотрщике...

Alexander
14.04.2018
11:53:21
тогда нужно сделать exec просмотршика и передать ему путь

kana
14.04.2018
11:53:22
по моему современные системы и так открывают ссылку правильно, не уверен что понял вопрос

Alexander
14.04.2018
11:53:28
как и в любом другом языке

Дмитрий
14.04.2018
11:54:30

Alexander
14.04.2018
11:54:37
если много с операций как в шеле то шел или туртл могут уменьшить бойлерплейт

Admin
ERROR: S client not available

Дмитрий
14.04.2018
11:54:56
https://www.stackage.org/lts-11.5/package/shelly-1.7.2
Вот, что приходит на ум.

Denis
14.04.2018
11:55:11
Ну черепашка же

Alexander
14.04.2018
11:55:17
да хоть process

Дмитрий
14.04.2018
11:56:24
А что за черепашка?

Alexander
14.04.2018
11:56:34
Shelly и turle уменьшают бойлерплейт если вы баш в Haskell превращаете

Дмитрий
14.04.2018
11:58:06

Alexander
14.04.2018
11:59:12
но ещё раз повторюсь что чтобы запустить достаточно библиотеки process

Imants
14.04.2018
13:05:58

Google

Ilya
14.04.2018
13:11:17
Есть какой-нибудь стандартный тип данных, чтобы хранить функции произвольной арности a -> a -> a -> a -> ... -> a -> a?
пока придумалось такое data F a = N (a -> F a) | C a, например plus = N (\x -> N (\y -> C (x + y)))


kana
14.04.2018
13:11:48
я правда немного упростил - убрал лишний поинтфри и лишний экволити. Мб он не лишний, но я не понял, нафига он
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE UndecidableInstances #-}
module Words where
class Variadic a r c | c -> r where
liftV :: ([a] -> r) -> c
instance Variadic a r r where
liftV build = build []
instance Variadic a r c => Variadic a r (a -> c) where
liftV build arg = liftV $ \args -> build (arg : args)
unwordsV :: Variadic String String f => f
unwordsV = liftV unwords
sumV :: Variadic Int Int f => f
sumV = liftV (sum :: [Int] -> Int)
showSumV :: Variadic Int String f => f
showSumV = liftV (show . sum :: [Int] -> String)
main :: IO ()
main = do
print $ unwordsV "abc" "de" "f"
print $ sumV (1 :: Int) (2 :: Int) (3 :: Int)
print $ showSumV (1 :: Int) (2 :: Int) (3 :: Int)
Выше решение systemspace
А, тип

Ilya
14.04.2018
13:12:04

Denis
14.04.2018
13:15:03

Ilya
14.04.2018
13:20:40

Denis
14.04.2018
13:21:04

Kirill
14.04.2018
13:21:15
Есть ещё вот такая штука https://hackage.haskell.org/package/universum-1.1.0/docs/Universum-VarArg.html

Ilya
14.04.2018
13:21:20
кто это? и чего именно это решение?
какой-то задачки?

Denis
14.04.2018
13:22:20
И там была такая ката

Ilya
14.04.2018
13:22:26
не слышал...
ката = задача?

kana
14.04.2018
13:22:37
да

Ilya
14.04.2018
13:22:53
а можно ссылку на кату тогда уж?

Denis
14.04.2018
13:23:26

kana
14.04.2018
13:24:05
https://www.codewars.com/kata/one-function-many-arguments-haskell-style
возможно она
да, она

Ilya
14.04.2018
13:24:16

kana
14.04.2018
13:24:16
а решение выше - просто обобщение, позволяющие делать из неполивариадик функций поливариадик

Ilya
14.04.2018
13:24:20