Я изучаю haskell и пытаюсь сделать красивую программу для печати. В какой-то момент я хочу получить длину строки (т.е. количество столбцов в этой строке). Чтобы иметь возможность сделать это с моим типом данных, я понимаю, что мне нужно реализовать Foldable, который опирается на Monoid.
Раньше моя строка была просто псевдонимом типа для списка, но ради обучения я хочу сделать этот шаг.
import System.IO
import System.Directory
import Control.Monad
import Data.Maybe
import Data.Monoid
import Data.Foldable
import Data.Functor
import Data.List.Split
type Field = String
data Row = Row [Field]
instance Monoid Row where
mempty = Row []
instance Foldable Row where
foldMap f (Row fs) = foldMap f fs
Но я получаю следующую ошибку компилятора (на ghci 8.0.2)
main.hs:20:19: error:
• Expected kind ‘* -> *’, but ‘Row’ has kind ‘*’
• In the first argument of ‘Foldable’, namely ‘Row’
In the instance declaration for ‘Foldable Row’
Теперь я не знаком с тем, что такое тип данных. Я ожидал, что это просто отложится на единственное свойство Row типа List