Изучай Haskell ради добра! Аппликативные функторы

Miran Lipovača, “Learn You a Haskell for Great Good! Functors, Applicative Functors and Monoids”, public translation into Russian from English More about this translation.

See also 132 similar translations

Translate into another language.

Participants

malphunction3900 points
Yasir3074 points
MadButterfly1205 points
And others...
Join Translated.by to translate! If you already have a Translated.by account, please sign in.
If you do not want to register an account, you can sign in with OpenID.
Pages: ← previous Ctrl next

Learn You a Haskell for Great Good! Functors, Applicative Functors and Monoids

Изучай Haskell ради добра! Аппликативные функторы

History of edits (Latest: Yasir 8 months ago) §

Comment was deleted

Comment was deleted

— Устаревший материал. Актуальный материал смотри здесь http://habrahabr.ru/tag/lyah/ или здесь https://bitbucket.org/yasir/lyah Yasir

Functors, Applicative Functors and Monoids

Функторы, аппликативные функторы и моноиды

History of edits (Latest: keyran 4 months, 1 week ago) §

Comment was deleted

Haskell's combination of purity, higher order functions, parameterized algebraic data types, and typeclasses allows us to implement polymorphism on a much higher level than possible in other languages. We don't have to think about types belonging to a big hierarchy of types. Instead, we think about what the types can act like and then connect them with the appropriate typeclasses. An Int can act like a lot of things. It can act like an equatable thing, like an ordered thing, like an enumerable thing, etc.

Сочетание чистоты, функций высшего порядка, параметризованных алгебраических типов данных и классов типов в Haskell делает реализацию полиморфизма более простой, чем в других языках. Для нас нет необходимости думать о типах, принадлежащих к большой иерархии. Вместо этого мы обдумываем, каким образом работают типы, а затем связываем их с помощью соответствующих классов типов. Int может вести себя как множество сущностей – сравниваемая сущность, упорядочиваемая сущность, перечислимая сущность и т. д.

History of edits (Latest: Yasir 8 months ago) §

Typeclasses are open, which means that we can define our own data type, think about what it can act like and connect it with the typeclasses that define its behaviors. Because of that and because of Haskell's great type system that allows us to know a lot about a function just by knowing its type declaration, we can define typeclasses that define behavior that's very general and abstract. We've met typeclasses that define operations for seeing if two things are equal or comparing two things by some ordering. Those are very abstract and elegant behaviors, but we just don't think of them as anything very special because we've been dealing with them for most of our lives. We recently met functors, which are basically things that can be mapped over. That's an example of a useful and yet still pretty abstract property that typeclasses can describe. In this chapter, we'll take a closer look at functors, along with slightly stronger and more useful versions of functors called applicative functors. We'll also take a look at monoids, which are sort of like socks.

Классы типов открыты, это означает, что мы можем определить собственный тип данных, подумать о том, как он может действовать, и связать его с классами типов, которые определяют его поведения. Мы также можем вводить новый класс типов, определяющие очень обобщенное и абстрактное поведение. Мы встречали классы типов, которые содержали операции для определения равенства двух сущностей, или сравнивающие две сущности на основе их порядка, в котором они располагаются. Такое поведение сущностей очень абстрактно и элегантно, но мы не думаем о нем как о чем-то очень специальном, потому что мы имели с ними дело большую часть нашей жизни. Недавно мы познакомились с функторами, которые по существу являются чем-то, для чего можно установить соответствие (отобразить). Это пример полезного и все ещё довольно абстрактного свойства, описываемого с помощью классов типов. В этой главе мы ближе познакомимся с функторами, а также с аппликативными функторами – слегка более сильной и полезной версией функторов. Мы также рассмотрим моноиды, которые похожи на носки.

History of edits (Latest: Yasir 8 months ago) §

— "ветроуказатели на аэродроме" - не уловил суть аналогии asinitsyn

— Это перевод "socks", в словаре одно из значений (такие полосатые "сачки" на палке). Видимо, автор намекает на операции <<= или >> и т.п., которые похожи, по его мнению, на ветроуказатели. malphunction

More 4 comments

— У меня возникла мысль: я до этого перевел раздел про моноиды. Взгляните на законы моноидов. 1) Не важно, с какой стороны будет mempty (тождественное значение) – в итоге мы все равно получаем первое значение (носки мы все равно надели); 2) mappend должна быть ассоциативна, т. е. порядок, в котором мы используем mappend (надеваем носки), чтобы превратить несколько моноидных значений в одно, не важен – в итоге мы получим тот же результат (носки, надетые на наши ноги) ;-) Yasir

Functors redux

Возвращаясь к функторам

History of edits (Latest: malphunction 2 years ago) §

We've already talked about functors in their own little section. If you haven't read it yet, you should probably give it a glance right now, or maybe later when you have more time. Or you can just pretend you read it.

Мы уже говорили о функторах в посвященном им разделе. Если вы все ещё не читали его, вам, возможно, следует взглянуть на него сейчас, либо позже, когда будет время. Или вы можете притвориться что прочитали его.

History of edits (Latest: asinitsyn 1 year, 10 months ago) §

Still, here's a quick refresher: Functors are things that can be mapped over, like lists, Maybes, trees, and such. In Haskell, they're described by the typeclass Functor, which has only one typeclass method, namely fmap, which has a type of fmap :: (a -> b) -> f a -> f b. It says: give me a function that takes an a and returns a b and a box with an a (or several of them) inside it and I'll give you a box with a b (or several of them) inside it. It kind of applies the function to the element inside the box.

Однако, вот краткое напоминание: функторы - это сущности, которые могут быть отображены друг в друга. Например - списки, объекты Maybe, деревья и т.п. В Haskell'е они описываются классом типов Functor, который содержит только один метод, fmap. Его тип fmap :: (a -> b) -> f a -> f b. Это определение говорит: дай мне функцию, которая принимает a и возвращает b и обертку содержащую a (или несколько a), и я верну обертку с b (или несколькими b) внутри. Это вроде применения функции к элементам внутри обертки.

History of edits (Latest: Yasir 10 months, 1 week ago) §

— В разделе, посвященном вводу-выводу, "box" переводилось как "коробка". Вспомните фразу "коробка с маленькими ножками" malphunction

— Да, но уж больно деревянно это звучит. Детям объясняют что такое переменные на примере "коробочек" с именем. Думаю, в Хаскеле детишки должны быть побольше. asinitsyn

Pages: ← previous Ctrl next

© Miran Lipovača. License: creative commons attribution noncommercial blah blah blah ... license