Это может применяться для любого типа класса, но позволяет делать это для функторов, поскольку я их знаю лучше. Я не буду создавать этот список.
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 должен быть более чистый путь:(