Convenciones de nombres:
Para funciones que devuelven valores booleanos, favorecé que se lea como si fuera una pregunta. Un mejor nombre en este caso podría ser puedeMatarloConUnSoloElemento.
Repetición de lógica:
El chequeo de si un personaje se quedó sin salud se repite con luchar; estaría bueno tener una función que se encargue de eso. Por ejemplo: estaMuerto :: Personaje -> Bool.
https://github.com/ValSpada/parcialesFuncional/blob/a9ea106e1b451f22f090b9fd64bbf66fdf9207e7/samuraiJack.hs#L22
Ya que el enunciado llama a estas funciones transformaciones, estaría bueno tener un type alias.
https://github.com/ValSpada/parcialesFuncional/blob/a9ea106e1b451f22f090b9fd64bbf66fdf9207e7/samuraiJack.hs#L31-L34
Para establecer una cota mínima preferí usar la función
max
:Nota a parte: para settear valores con mappers favorecé
const
en vez de hacer cosas como multiplicar por 0:https://github.com/ValSpada/parcialesFuncional/blob/a9ea106e1b451f22f090b9fd64bbf66fdf9207e7/samuraiJack.hs#L55-L56
Convenciones de nombres: Para funciones que devuelven valores booleanos, favorecé que se lea como si fuera una pregunta. Un mejor nombre en este caso podría ser
puedeMatarloConUnSoloElemento
.Repetición de lógica: El chequeo de si un personaje se quedó sin salud se repite con
luchar
; estaría bueno tener una función que se encargue de eso. Por ejemplo:estaMuerto :: Personaje -> Bool
.https://github.com/ValSpada/parcialesFuncional/blob/a9ea106e1b451f22f090b9fd64bbf66fdf9207e7/samuraiJack.hs#L69-L71
Tenés la función
replicate :: Int -> a -> [a]
que dada un número entero y un valor te genera una lista con ese valor repetido esa cantidad de veces:https://github.com/ValSpada/parcialesFuncional/blob/a9ea106e1b451f22f090b9fd64bbf66fdf9207e7/samuraiJack.hs#L78
Te faltó la concentración nivel 4.
https://github.com/ValSpada/parcialesFuncional/blob/a9ea106e1b451f22f090b9fd64bbf66fdf9207e7/samuraiJack.hs#L104-L106
Podrías definir esta función de forma más declarativa usando
iterate
.https://github.com/ValSpada/parcialesFuncional/blob/a9ea106e1b451f22f090b9fd64bbf66fdf9207e7/samuraiJack.hs#L108-L109
Esta función ya existe y se llama
id :: a -> a
.https://github.com/ValSpada/parcialesFuncional/blob/a9ea106e1b451f22f090b9fd64bbf66fdf9207e7/samuraiJack.hs#L120
Esto lo deberías devolver si el atacante está muerto, no el defensor luego de ser atacado.
https://github.com/ValSpada/parcialesFuncional/blob/a9ea106e1b451f22f090b9fd64bbf66fdf9207e7/samuraiJack.hs#L125-L129
Lógica repetida.