Tengo problemas para entender los funtores, específicamente qué tipo de concreto se encuentra en LYAH. Creo que esto se debe a que no entiendo qué es realmente []
.¿Qué es [] (constructor de lista) en Haskell?
fmap :: (a -> b) -> f a -> f b
- Es
[]
, un tipo constructor? O bien, ¿es un constructor de valor? - ¿Qué significa tener el tipo de:
[] :: [a]
? - ¿Es como
Maybe
type-constructor oJust
value constructor?- Si es así entonces ¿cómo es que
Just
Just
tiene una firma comoJust :: a -> Maybe a
en lugar deJust :: Maybe a
, en otras palabras, ¿por qué no[]
mecanografiadas[] :: a -> [a]
- Si es así entonces ¿cómo es que
- LYAH dice esto, ya que se aplica a los funtores: Aviso cómo no escribimos la instancia Functor [a] donde, porque desde fmap :: (a -> b) -> fa -> fb, vemos que f tiene que ser un constructor de tipo que toma un tipo. [a] ya es un tipo concreto (de una lista con cualquier tipo dentro), mientras que
[]
es un constructor de tipos que toma un tipo y puede producir tipos como [Int], [String] o incluso [[String]]. Estoy confundido, aunque el tipo de[]
implica que es como un literal para[a]
¿a qué intenta llegar LYAH?
Y si desea algo de tipo a -> [a], existe la función de aspecto gracioso (: []). –
^O puede usar 'return' (o' pure' u otros): D –
@DanielVelkov: ': []' es ':' parcialmente aplicado a '[]' usando la sintaxis de sección, solo para ser claro. – mk12