Anonymous
https://gist.github.com/sojalei/0d4774c3a942c145f0433531fd34f0d6
Anonymous
всем спасибо, решил сам
Дима
Это называется использовать чят в качестве утёнка
Зигохистоморфный
вызвать и не вернуть?
Зигохистоморфный
sequence_ [fn, fn2] $ param
Зигохистоморфный
мб как-то так
Oleg
А зачем чистую функцию вызывать и не возвращать?
Зигохистоморфный
ну в моем случае это какие-то функции с эффектом
Oleg
Окей :)
Зигохистоморфный
например sequence_ [print 20, print . (+10) $ 100]
Oleg
Почему бы тогда не использовать do?
Зигохистоморфный
ну или print a >> print b >> pure ()
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
https://gist.github.com/sojalei/0d4774c3a942c145f0433531fd34f0d6
судя по типам тебе нужно вернуть то, что имет такой же тип, что и a
Anonymous
да там решалось stomp (stab a)
Anonymous
Ещё помощь нужна:( нахождение среднего арифметического проходит все тесты на стёпике кроме одного(2 3 5) avg :: Int -> Int -> Int -> Double avg a b c = fromIntegral (a + b + c) / 3
Cheese
со ScopedTypeVariables легко забиндить типа так: foo (A (fb :: F b)) = case sing :: Sing b of ...
спасибо! заработало! https://gist.github.com/cblp/b9e0d3aac0ab8e496a9930d74e3b8f57
Cheese
спасибо @int_index и @qnikst
кана
Судя по документации, оверлапинг такого рода ошибочен (да и это логично, a по определению принимает все типы, а где-то выше для одного из вариантов другой результат), но что делать, когда очень нужно? Как сделать все правильно? Нужно что-то вроде паттерн-метчинга в type families type family F a :: Type type instance F [a] = [Int] type instance F a = Int
кана
closed type families не решение, потому что инстансы разнесены по инстансам тайпкласса. Логика подсказывает, что решения в принципе нет, ведь даже если бы инстансы реально паттерн-метчились, но нужен был бы способ отсортировать инстансы по специфичности (в начале самые точные, в конце самые общие), а высчитать специфичность инстанса - что-то не очень тривиальная задача
Vladislav
> а высчитать специфичность инстанса - что-то не очень тривиальная задача GHC умеет это делать, но не для type families, только для классов. Так что прологоподобный код на фандепах возможен
Max
https://eventil.com/presentations/aKsn8q
кана
Типа такого: instance Show Char where showsPrec _ '\'' = showString "'\\''" showsPrec _ c = showChar '\'' . showLitChar c . showChar '\'' showList cs = showChar '"' . showLitString cs . showChar '"'
кана
Массив я в своём примере чисто для примера, у меня там на самом деле a :>: (b :<|>: c) и a :>: b пересекаются, хотел понять, в чем была проблема servant-client вложенные альтерантивы в одну зафлэтить (то есть ty -> (a :<|> b) в (ty -> a) :<|> (ty -> b)
Alexander
так, чего-то я туплю и мне думать лень
Alexander
у меня есть I (f :: * -> *) (a :: *), в одном месте мне хочется записать чтобы f = V2 g для любого g, как мне это делать, через Compose какой?
Alexander
т.е. f a = V (g a) надо
Зигохистоморфный
натуральное преобразование?
Зигохистоморфный
даже изоморфизм может быть) хотя не буду ничего советовать не понимая что надо)
Alexander
не, Cmpose
Зигохистоморфный
Data.Functor.Compose?
Alexander
да
Alexander
прикольно, работает
Alexander
похоже что API близок к хорошему, т.к. сошлись те вещи, что не сходились раньше
Зигохистоморфный
Compose?
Alexander
в целом апи для либы
Cheese
в чём дело-то было? выглядит правильно
подозреваю, что в конечности Int
Anonymous
в чём дело-то было? выглядит правильно
после запятой было что-то вроде 3333333335
Ilya
И как "надо"? Что-то типа? double ((a + b + c) div 3) + double ((a + b + c) mod 3) / 3.0
Ilya
Извиняюсь за неровный почерк
Anonymous
И как "надо"? Что-то типа? double ((a + b + c) div 3) + double ((a + b + c) mod 3) / 3.0
такое прошло тесты avg a b c = (/3) $ foldr((+) . fromIntegral) 0 [a, b, c]
Зигохистоморфный
ага)) я кинул просто вариант с foldr (хотя можешь (/3) $ sum $ fromIntegral <$> [a,b,c])
Alexander
ну там достаточно fromIntegral на каждый агрумент звать было, я думаю
Alexander
просто там было что-нить типа average maxBound maxBound maxBound
Зигохистоморфный
ну можно и так было (fromIntegral a + fromIntegral b + fromIntegral c) / 3
Alexander
flip flip fromIntegral . (((.) . (+)) .) . (. fromIntegral) . (+) . fromIntegral =)
Alexander
а на 3 ещё
Alexander
flip flip 3 . ((flip . ((/) .)) .) . flip flip fromIntegral . (((.) . (+)) .) . (. fromIntegral) . (+) . fromIntegral
Alexander
интересно это кто-то может сходу прочитать
Alexander
@sojalei это тоже самое, просто в pointfree
Anonymous
@sojalei это тоже самое, просто в pointfree
не на то сообщение ответил
Alexander
в общем проблема была в том, что в решении где fromIntegral $ a + b + c) там проблемы с переполнением
Alexander
вот как ты решил
Alexander
сделать fromIntegral на каждое число перед тем, как складывать
Anonymous
это конечно только для стёпика я решил, а так не
Зигохистоморфный
подходит
Зигохистоморфный
тип только укажи
Alexander
я не верю, что не проходит
Зигохистоморфный
а не просто функцию
Зигохистоморфный
сделай с типом а не просто в ghci
Alexander
а в чем проблема ответа выше?
Alexander
где 3+2+5?
Зигохистоморфный
все там норм
Anonymous
f :: Integer -> Integer -> Integer -> Float f a b c = (fromIntegral a + fromIntegral b + fromIntegral c) / 3 теперь ответ 3.3333333 Так и должно быть?
Зигохистоморфный
Double и Float имеют разную точность
Alexander
и то и другое верно
Иλьямбда
А пользовался кто-нибудь здесь Leksah?
Иλьямбда
Удобно ли писать на ней код, посоветуете ли начинающему?
Влод
Он наверное не развивается
Aleksei (astynax)
Leksah потихоньку пилят. Но явно не в том темпе, в которм нужно
Aleksei (astynax)
К тому же, говорят, лекса не очень то дружит со stack (или просто не всё работает)
Aleksei (astynax)
Думаю, что даже плагин для Idea уже стал лучше, чем Лекса
Aleksei (astynax)
Странно, что кто-то в этом (в неуспешности Лексы) сомневался вообще - всегда было слишком мало ресурсов для её развится