Haskell Data.Sequence - нет экземпляра для (Applicative Seq)
Изменить: Извините, просто глупость с моей стороны. Я использую платформу 7.6.3, но читаю онлайн-документы для "последних", и я просто сделал это:
>:i Seq
newtype Seq a
= Data.Sequence.Seq (Data.Sequence.FingerTree
(Data.Sequence.Elem a))
-- Defined in `Data.Sequence'
instance Eq a => Eq (Seq a) -- Defined in `Data.Sequence'
instance Monad Seq -- Defined in `Data.Sequence'
instance Functor Seq -- Defined in `Data.Sequence'
instance Ord a => Ord (Seq a) -- Defined in `Data.Sequence'
instance Read a => Read (Seq a) -- Defined in `Data.Sequence'
instance Show a => Show (Seq a) -- Defined in `Data.Sequence'
и посмотрите, нет аппликативного экземпляра. Извините за беспокойство, и спасибо bheklilr за то, что спросил меня о версии, на которой я только что разместил.
Следующее смущает меня. Определенно, кажется, есть экземпляр, определяющий (<*>) разумно для Seq:
instance Applicative Seq where
pure = singleton
fs <*> xs = foldl' add empty fs
where add ys f = ys >< fmap f xs
Тем не менее, это происходит:
>:m + Data.Sequence Control.Applicative
>(*) <$> [1..4] <*> [3..4]
[3,4,6,8,9,12,12,16]
>(*) <$> fromList [1..4] <*> fromList [3..4]
<interactive>:58:25:
No instance for (Applicative Seq) arising from a use of `<*>'
Possible fix: add an instance declaration for (Applicative Seq)
In the expression: (*) <$> fromList [1 .. 4] <*> fromList [3 .. 4]
In an equation for `it':
it = (*) <$> fromList [1 .. 4] <*> fromList [3 .. 4]
>:t (*) <$> fromList [1..4]
(*) <$> fromList [1..4] :: (Enum a, Num a) => Seq (a -> a)
Использование синглтона приводит к несколько иной типизации (без квалификации Enum) и, следовательно, к несколько иной ошибке.
>:t (*) <$> singleton 3
(*) <$> singleton 3 :: Num a => Seq (a -> a)
>:t (*) <$> singleton 3 <*> fromList [3 .. 4]
<interactive>:1:21:
Could not deduce (Applicative Seq) arising from a use of `<*>'
from the context (Enum b, Num b)
bound by the inferred type of it :: (Enum b, Num b) => Seq b
at Top level
Possible fix: add an instance declaration for (Applicative Seq)
In the expression: (*) <$> singleton 3 <*> fromList [3 .. 4]
Тип Seq (a -> a)
мне кажется, чтобы соответствовать f (a -> b)
требуется (<*>) :: Applicative f => f (a -> b) -> f a -> f b
,
Я уверен, что это просто, и мне будет стыдно за вопрос, но заранее спасибо.