У меня возникают проблемы с пониманием функторов, в частности, конкретного типа в LYAH. Я считаю, что это потому, что я не понимаю, что такое [].
fmap :: (a -> b) -> f a -> f b
- Является
[], конструктором типа? Или это конструктор значений? - Что значит иметь тип:
[] :: [a]? - Это как конструктор типа
Maybeили конструктор значенийJust?- Если это похоже на
Just, то как получилось, чтоJustимеет подпись типаJust :: a -> Maybe a, а неJust :: Maybe a, иными словами, почему не[]typed[] :: a -> [a]
- Если это похоже на
- LYAH говорит об этом, поскольку он применим к функторам: Обратите внимание, что мы не пишем экземпляр Functor [a] где, потому что из fmap:: (a → b) → fa → fb, мы видим, что f должен быть конструктором типа, который принимает один тип. [a] уже является конкретным типом (из списка с любым типом внутри него), а
[]- это конструктор типа, который принимает один тип и может создавать такие типы, как [Int], [String] или даже [[String] ]. Я смущен, хотя тип[]означает, что он похож на литерал для[a], к чему стремится LYAH?