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,

Я уверен, что это просто, и мне будет стыдно за вопрос, но заранее спасибо.

0 ответов

Другие вопросы по тегам