Alexander
ну именно твой пример выглядит сложнее чем должен
Ilya
Alexander
вообще пользоваться <$> и <*> нормально
Alexander
а блин, я хотел @SINCERELY ответить
melvin
melvin
а 3+ нет ;_;
melvin
практика вылечит?
Vasiliy
по-моему, норм читается
Alexander
мне кажется что разницы в колве агрументы нет
Alexander
слодности в чтении возникают если там всякие join вокруг и то 1 раз
Ilya
Мне интересно, выкладывай
https://github.com/Toucandy/Index/blob/master/Index.hs
в общем вот код, можно поиграться
нужно просто сохранить файл и натравить ghci
ghci Index.hs
Ilya
пока только списки, массивы и пр. будут потом
Alexander
не надо с такой структурой индекса переопределять для векторов операции :)
Ilya
ну там нужно не [a] -> i, а t a -> i
Ilya
я думаю
Alexander
угу
Ilya
где t будет списком или чем угодно
Ilya
это в планах:)
melvin
можно считать что <$> это просто композиция, а <*> композиция "такая что следующая композиция будет произведена не с аргументом текущей композиции, а со следующим"?
Alexander
или I (forall t . HasLength t => t -> Int)
melvin
Prelude> :t (\x y z -> [x,y,z]) <$> (+3) <$> (*2) <$> (/2)
(\x y z -> [x,y,z]) <$> (+3) <$> (*2) <$> (/2)
:: Fractional a => a -> a -> a -> [a]
Prelude> :t (\x y z -> [x,y,z]) <$> (+3) <*> (*2) <*> (/2)
(\x y z -> [x,y,z]) <$> (+3) <*> (*2) <*> (/2)
:: Fractional t => t -> [t]
вроде такого
melvin
если я правильно понял последовательные <$> производят композицию только относительно первого элемента
Ilya
Alexander
что лучше это или явно вытащить тип структуры в типовой агрумент Index я не знаю
Alexander
ещё меня печалит, что придется переопределять много функций из разных библиотек
Alexander
и что с этим делать и возможно ли я не знаю
Alexander
@int_index signatures и все эти модули могут помочь это решить?
Alexander
вроде нет, без переписывания всего и вся?
Alexander
TH если только
Ilya
с TemplateHaskell я пока не знаком:) посмотрю
Vasiliy
Prelude> :t (\x y z -> [x,y,z]) <$> (+3) <$> (*2) <$> (/2)
(\x y z -> [x,y,z]) <$> (+3) <$> (*2) <$> (/2)
:: Fractional a => a -> a -> a -> [a]
Prelude> :t (\x y z -> [x,y,z]) <$> (+3) <*> (*2) <*> (/2)
(\x y z -> [x,y,z]) <$> (+3) <*> (*2) <*> (/2)
:: Fractional t => t -> [t]
вроде такого
может, так проще будет?
λ> :t do x <- (+3); y <- (*2); z <- (/2); pure [x, y, z]
do x <- (+3); y <- (*2); z <- (/2); pure [x, y, z]
:: Fractional t => t -> [t]
melvin
melvin
я пытаюсь в функторах разобратся
Aleksei (astynax)
чем до монадки "упрощать" лучше уж liftA3 взять
Aleksei (astynax)
liftA3 (\x y z -> [x, y, z]) (+1) (*2) (/3)
Aleksei (astynax)
В данном же случае вообще лучше сделать
sequenceA [(+1), (*2), (/3)]
😆
Aleksei (astynax)
> :t liftA3 (\x y z -> [x, y, z]) (+1) (*2) (/3)
liftA3 (\x y z -> [x, y, z]) (+1) (*2) (/3)
:: Fractional t => t -> [t]
> liftA3 (\x y z -> [x, y, z]) (+1) (*2) (/3) 9
[10.0,18.0,3.0]
> :t sequenceA [(+1), (*2), (/3)]
sequenceA [(+1), (*2), (/3)] :: Fractional a => a -> [a]
> sequenceA [(+1), (*2), (/3)] 9
[10.0,18.0,3.0]
Ilya
There should be one-- and preferably only one --obvious way to do it
😀
Ilya
я слышал, как хаскель называют "правильным питоном"
melvin
Ilya
но меня всегда радует, когда я решаю, каким из четырёх способов делать ту или иную задачу, и все одинаково подходит
Ilya
а потом оказывается, что правильно вообще пятым
Aleksei (astynax)
Нельзя сделать такой язык, где любая задача будет решаться ровно одним способом. Иначе получится HQ9+
Alexander
is HQ9+ turing complete?
Aleksei (astynax)
Нет, просто делает всё, что нужно от языка программировния :)
Max
Serghei
может он просто так толсто тролил )
Max
Все обиделись на питон? )
Dmitry
а что?
Alexander
/me ничего не понял
Max
Предлагаю либо разжечь, либо забить
Dmitry
ну попробуй разжечь
Dmitry
а то тихо здесь стало
доня.
Ilya
Max
Alexander
а что такого в этом утверждении
Max
Питон, видимо, не тру
Dmitry
когда у тебя в рантайме разваливается код от того, что в одном месте он пробелами выровнен, а в другом табами - это не очень тру, согласись
Alexander
питон точно не тру, если не скрипты писать
Дима
Признаюсь, иногда тру питона
melvin
Ilya
я недавно вот про что подумал: питон и хаскель во многом похожи, но!
питон по дефолту энергичен, но постепенно добавляет ленивый синтакиисс
хаскель по дефолту ленив, но постепенно добавляет энергичный синтаксис
Ilya
интересно, как скоро они "встретятся"
Ilya
где-то по середине
melvin
доня.
у питона с хаскелем общего примерно ничего
Dmitry
1) import
Евгений
Dmitry
2) идентация
melvin
Дима
3) Направление письма
Ilya
4) английские кейворды
доня.
@Masteroid опередил(
melvin
опередил
melvin
Евгений
Блин :(
Евгений
Списки есть!!!