Это может применяться для любого типа класса, но позволяет делать это для функторов, поскольку я их знаю лучше. Я не буду создавать этот список.
l = [Just 1, [1,2,3], Nothing, Right 4]
а затем
map (fmap (+1)) l
чтобы получить
[Just 2, [2,3,4], Nothing, Right 5]
Я знаю, что они - все Фунтеры, которые содержат Интов, так что это возможно. Как я могу это сделать?
Edit
Это оказывается более грязным, чем казалось бы. В Java или С# вы объявите интерфейс IFunctor
, а затем просто напишите
List<IFunctor> l = new List<IFunctor> () {
new Just (1),
new List<Int>() {1,2,3},
new Nothing<Int>(),
new Right (5)
}
предполагая Maybe
, List
и Either
реализовать IFunctor
. Естественно Just
и Nothing
расширяют Maybe
и Right
и Left
расширяют Either
. Не удовлетворены этой проблемой, которую легче решить на этих языках!!!
В Haskell должен быть более чистый путь:(