Vladislav
Через 2 релиза все равно сломаю
Vladislav
Т.е. если не включить сейчас, то через 2 релиза код сломается.
Зигохистоморфный
Всегда можно сделать n+1 имея liftN
liftN+1 = (<*>) + liftN
.sυλ
A64m
A64m
(причем заброшенный уже, вроде)
кана
[большая горечь]
A64m
To do this, we formalize the notion of kind, writing * for the kind of
all types and k1 -> k2 for the kind of a constructor which takes
something of kind k1 and returns something of kind k2. This notion
comes is motivated by some theoretical work by Henk Barendregt on the
subject of `Generalized type systems'; Do not confuse this with the use
of the symbol * in a certain well-known functional language where it
represents a type variable. These things are completely different!
.sυλ
Снова по линзам вопрос. Так выглядит функция, изменяющая объект.
.sυλ
А как должна выглядеть аналогичная, которая получает из него данные?
Aleksei (astynax)
game ^. boss . health
.sυλ
A64m
емнип use (boss.health)
кана
кана
health' <- use $ boss . health
можно сразу и менять, и получать:
health' <- boss.health <-= 10
как заметил @astynax, можно через gets
health' <- gets $ view $ boss.health
собственно use = gets . view
.sυλ
В чем разница между runStateT и execStateT?
Последний не пропускает эффекты IO?
кана
run отдает и стейт, и результат вычисления в монаде
exec отдает только стейт в монаде (когда результат вычисления не важен)
кана
это почти ко всем основным mtl-монадам относится
кана
у своих я тоже такого нейминга придерживаюсь
кана
есть еще evalStateT, который отдает только результат
.sυλ
кана
будут, покажи код
Alexander
будут конечно работать
кана
program :: StateT Int IO ()
program = do
liftIO . putStr $ "inner state: "
liftIO . print =<< get
modify (+ 10)
main :: IO ()
main = do
state <- execStateT program 20
print $ "result state: " ++ state
вывод:
inner state: 20
result state: 30
Anonymous
Alexander
а http://hackage.haskell.org/package/gtk норм или есть что то более актуальное?
Cheese
кана
Ну имхо от voidState интуиции не больше, чем от execState
Alexander
А я всегда путаю eval / exec 😞
A64m
у eval должен быть результат, очевидно
A64m
так что перепутать сложно
A64m
вообще же eval и exec, наверное, от того, что mtl происходит из пейпера про модульные интерпретаторы
Alexander
> Но логика есть и в текущем именовании - exec делается ради эффекта, а eval ради вычисления значения
Вот это, пожалуй, поможет мне запомнить, кто из них a, а кто s
Антон
A64m
да, и * и бокс из пейпера Барендрегта взял и применил (когда изобретал конструктор классы) Марк Джонс - автор хаскельных фич 90 которые так ненавидят любить и любят ненавидить хаскелисты
A64m
можно считать что все виновные установлены, Тернер и Милнер не при чем
A64m
бокс, кстати, не имеет отношение ко всяким боксед-лифтед, это просто квадратик из Барендрегтовского пейпера словом
Антон
A64m
> Why do this? One alternative is to go the route of Coq and Agda and have an infinite tower of type universes. But, this adds a lot of complexity. These languages take this route because * :: * makes a language inconsistent as a logic. However, Haskell is already inconsistent as a logic (because of undefined and GHC.Exts.Any) and so we don't have to worry about a new source of inconsistency. Furthermore, the type safety of Haskell does not depend on its own consistency -- unlike Coq and Agda, Haskell relies on the consistency of a coercion language, which is not threatened by * :: *
Антон
Vladimir
Это всё очень сложные вопросы. Можно вопрос поглупее и попроще? Какими значениями населён в этих-ваших идрисах и агдах тип 7? Или 5? Или 92?
Cheese
Антон
A64m
рано читать перестали
> the type safety of Haskell does not depend on its own consistency -- unlike Coq and Agda, Haskell relies on the consistency of a coercion language, which is not threatened by * :: *
A64m
короче, вложенными универсумами в хаскеле по памяти не проедешь
Alexander
меня печалит gtk
Alexander
есть хорошие альтернативы чтобы именно с хаскеле дружили хорошо?
Alexander
А то я беру один из контейнеров виджета и он виджет и не контейнер
Alexander
приходится тайпкастить
Maxim
Alexander
Alexander
не, логика конечно правильная, но имхо это значительное усложнение архитектуры
Alexander
собственно что-нибудь кровавое и энтерпрайзное наверно только так и надо
Alexander
веб-приложения с оффлайн режимом это давно не новость
Alexander
но я имел виду скорее self-hosted прямо в соседнем процессе
Alexander
а вместо браузера электрон
Cheese
да, это один из вариантов
Alexander
тут еще такая фишка, что десктоп-разработчики решают проблему слишком сильной связанности фронтенда и бэкенда, а веб-разработчики недостаточной
Alexander
типа дублирования валидаций, рассинхронизации переводов и подобного
Alexander
а если мы говорим о том что на фронтенд выносится самый минимум, то получается то же что и линковка фреймворка через FFI в свой любимый язык имхо
Cheese
Alexander
ну это не бесплатная борьба
Alexander
чем слабее связанность тем хуже DRY
Alexander
это в общем то даже доказательств не требует
Alexander
тащемто кровавый энтерпрайз именно потому кровавый, что им приходится бороться со связанностью уже довольно дорогими способами
Bohdan
А можно ли считать нелюбовь к хаскеллю детектором макакичей?
Bohdan
А то я так и не заценил, похоже
.sυλ
А как применить Traversal' к многомерным спискам?
Положим, есть
_field :: [[Object]]
Object { _param :: Int}
Как можно из _field извлечь [[_param]]?
.sυλ
toListOf работает только для одномерных же, нет?
.sυλ
Или сработает элементарный map к field.traversal?
Alexander
в чем проблема сделаеть join многомерного списка?