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 ()
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
Anonymous
да там решалось stomp (stab a)
Anonymous
Ещё помощь нужна:(
нахождение среднего арифметического проходит все тесты на стёпике кроме одного(2 3 5)
avg :: Int -> Int -> Int -> Double
avg a b c = fromIntegral (a + b + c) / 3
Cheese
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
Cheese
кана
Типа такого:
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)
Ilya
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
Ilya
И как "надо"? Что-то типа?
double ((a + b + c) div 3) + double ((a + b + c) mod 3) / 3.0
Ilya
Извиняюсь за неровный почерк
Anonymous
Зигохистоморфный
ага)) я кинул просто вариант с 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
Anonymous
Alexander
интересно это кто-то может сходу прочитать
Alexander
@sojalei это тоже самое, просто в pointfree
Anonymous
Anonymous
Alexander
в общем проблема была в том, что в решении где fromIntegral $ a + b + c) там проблемы с переполнением
Anonymous
Alexander
вот как ты решил
Alexander
сделать fromIntegral на каждое число перед тем, как складывать
Anonymous
это конечно только для стёпика я решил, а так не
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 уже стал лучше, чем Лекса
Mikhail
Aleksei (astynax)
Странно, что кто-то в этом (в неуспешности Лексы) сомневался вообще - всегда было слишком мало ресурсов для её развится