multiplicar - multiplos en haskell
¿Es posible convertir esta función haskell recursiva en una llamada de mapa? (2)
Este es mi código:
type HoraAtendimento = (String, Int, Int)
htmlHAtendimento :: [HoraAtendimento] -> Html
htmlHAtendimento [] = toHtml ""
htmlHAtendimento ((da,hia,hfa):[]) = toHtml da +++ "feira "
+++
show hia +++ "h - " +++ show hfa +++ "h"
htmlHAtendimento ((da,hia,hfa):r) = toHtml da +++ "feira "
+++
show hia +++ "h - " +++ show hfa +++ "h, "
+++
htmlHAtendimento r
Estoy buscando una forma de utilizar la función de mapa y deshacerme de esta función recursiva. Es eso posible y si es así, ¿cómo lo hago?
Desea retirarse de una lista no vacía. Este código podría hacer el truco:
type HoraAtendimento = (String, Int, Int)
htmlHAtendimento :: [HoraAtendimento] -> Html
htmlHAtendimento [] = toHtml ""
htmlHAtendimento l = foldl1 (+++) $ map convert l
where convert (da,hia,hfa) = toHtml da +++ "feira " +++
show hia +++ "h - " +++ show hfa +++ "h"
Mira el tipo de map
. Es (a -> b) -> [a] -> [b]
. Eso no se parece a tu tipo, que es [a] -> b. Eso no es un mapa, eso es un pliegue.
La función de orden superior que desea ver es foldr
. Ver Hoogle .
Algo como...
htmlHAtendimento :: [HoraAtendimento] -> Html
htmlHAtendimento [] = toHtml ""
htmlHAtendimento l = foldr1 (+++) $ intersperse ", " $ map f l
where f (da, hia, hfa) = toHtml da
+++ "feira "
+++ show hia
+++ "h - "
+++ show hfa
+++ "h"
No sé si eso es correcto, pero está en la dirección correcta.