«Псевдо-функтор» Haskell

У меня есть многочлен

data Poly a = Poly [a]

Я хотел бы иметь возможность делать что-то вроде fmap (take 3) polynomial , но я невозможно, поскольку Poly на самом деле не является функтором, поскольку f , который я использую в fmap , может иметь только тип [a] -> [b] , а не a -> b .

Есть ли идиома или способ, которым я могу выразить то, что хочу?


РЕДАКТИРОВАТЬ: вот функция, которая выполняет то, что я хочу

myMap :: ([a] ->[b]) -> P a -> P b
myMap f (P x) = P (f x)

использование:

*Main> myMap (take 3) (P [1..])
P [1,2,3]

По типу sig видно, что это почти fmap, но не совсем. Я, очевидно, способен написать код для myMap , но я просто хочу знать, есть ли другая идиома, которую я должен использовать вместо этого.

5
задан MatrixFrog 1 October 2011 в 00:00
поделиться