У меня есть многочлен
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
, но я просто хочу знать, есть ли другая идиома, которую я должен использовать вместо этого.