Аппликатив без функтора

У меня есть тип Изображение , которое в основном представляет собой c-массив чисел с плавающей запятой. Создавать функции легко например map :: (Float -> Float) -> Image -> Image или zipWith :: (Float -> Float -> Float) -> Image -> Image -> Image .

Тем не менее, у меня есть ощущение, что можно было бы предоставить что-то похожее на аппликативный экземпляр поверх этих функций, позволяющий более гибкие манипуляции на уровне пикселей, например ((+) <$> image1 <*> image2) или ((\ xyz -> (x + y) / z) <$> i1 <*> i2 <*> i3) . Однако наивный подход терпит неудачу, поскольку тип изображения не может содержать ничего, кроме плавающих, что делает невозможным реализацию fmap как такового.

Как это можно реализовать?

10
задан aleator 11 August 2011 в 11:08
поделиться