Я новичок в Haskell, пытаясь понять Functor. Я взял следующий код из Data.Either module (Замененные данные либо Either1). Я только что обновил, удалив «Either1 a» и заменив его на «Either1» (пример Functor Either1 где).Как создать определение Functor для любого типа
data Either1 a b = Left1 a | Right1 b
instance Functor Either1 where
fmap f (Left1 x) = Left1 x
fmap f (Right1 y) = Right1 (f y)
Когда я пытаюсь загрузить выше фрагмента, я получаю следующую ошибку.
Prelude> :load Sample.hs
[1 of 1] Compiling Main (Sample.hs, interpreted)
Sample.hs:3:18:
Expecting one more argument to ‘Either1’
The first argument of ‘Functor’ should have kind ‘* -> *’,
but ‘Either1’ has kind ‘* -> * -> *’
In the instance declaration for ‘Functor Either1’
Failed, modules loaded: none.
Мой вопрос, почему я должен поставить «Either1» при определении БПМЖ функции, почему не может «Either1" ?
Aaaaaand, чтобы уточнить, фактический синтаксис для последнего примера - 'instance forall a. Functor (Либо a) где' –
Интересно, так как когда '' 'фактически легально в объявлениях экземпляра? Я почти уверен, что раньше этого не было. – leftaroundabout
Поскольку я помню, но я относительно новичок в Haskell :). Во всяком случае, [live example] (http://coliru.stacked-crooked.com/a/46a9b4be4fd21cab) (неразрешимый бит на самом деле не является его частью). –