Изучай Haskell ради добра! Аппликативные функторы | Participants
|
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translated in draft, editing and proof-reading required.
If you do not want to register an account, you can sign in with OpenID.
Learn You a Haskell for Great Good! Functors, Applicative Functors and Monoids | ||
Functors, Applicative Functors and Monoids | 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 может вести себя как множество сущностей – сравниваемая сущность, упорядочиваемая сущность, перечислимая сущность и т. д. | |
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. | Классы типов открыты, это означает, что мы можем определить собственный тип данных, подумать о том, как он может действовать, и связать его с классами типов, которые определяют его поведения. Мы также можем вводить новый класс типов, определяющие очень обобщенное и абстрактное поведение. Мы встречали классы типов, которые содержали операции для определения равенства двух сущностей, или сравнивающие две сущности на основе их порядка, в котором они располагаются. Такое поведение сущностей очень абстрактно и элегантно, но мы не думаем о нем как о чем-то очень специальном, потому что мы имели с ними дело большую часть нашей жизни. Недавно мы познакомились с функторами, которые по существу являются чем-то, для чего можно установить соответствие (отобразить). Это пример полезного и все ещё довольно абстрактного свойства, описываемого с помощью классов типов. В этой главе мы ближе познакомимся с функторами, а также с аппликативными функторами – слегка более сильной и полезной версией функторов. Мы также рассмотрим моноиды, которые похожи на носки. | — "ветроуказатели на аэродроме" - не уловил суть аналогии — asinitsyn — Это перевод "socks", в словаре одно из значений (такие полосатые "сачки" на палке). Видимо, автор намекает на операции <<= или >> и т.п., которые похожи, по его мнению, на ветроуказатели. — malphunction More 4 comments — У меня возникла мысль: я до этого перевел раздел про моноиды. Взгляните на законы моноидов. 1) Не важно, с какой стороны будет mempty (тождественное значение) – в итоге мы все равно получаем первое значение (носки мы все равно надели); 2) mappend должна быть ассоциативна, т. е. порядок, в котором мы используем mappend (надеваем носки), чтобы превратить несколько моноидных значений в одно, не важен – в итоге мы получим тот же результат (носки, надетые на наши ноги) ;-) — Yasir |
Functors redux | ||
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. | Мы уже говорили о функторах в посвященном им разделе. Если вы все ещё не читали его, вам, возможно, следует взглянуть на него сейчас, либо позже, когда будет время. Или вы можете притвориться что прочитали его. | |
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) внутри. Это вроде применения функции к элементам внутри обертки. | — В разделе, посвященном вводу-выводу, "box" переводилось как "коробка". Вспомните фразу "коробка с маленькими ножками" — malphunction — Да, но уж больно деревянно это звучит. Детям объясняют что такое переменные на примере "коробочек" с именем. Думаю, в Хаскеле детишки должны быть побольше. — asinitsyn |
© Miran Lipovača. License: creative commons attribution noncommercial blah blah blah ... license

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