Hola.
No entiendo el rol de las funciones encodeWord y decodeWord. Tampoco entiendo los tipos. Por ejemplo, si encodeWord recibe un caracter y su posición módulo 3, el tipo no debería ser
encodeWord :: Char -> Int -> Word8 ?
Saludos
Hola.
No entiendo el rol de las funciones encodeWord y decodeWord. Tampoco entiendo los tipos. Por ejemplo, si encodeWord recibe un caracter y su posición módulo 3, el tipo no debería ser
encodeWord :: Char -> Int -> Word8 ?
Saludos
El caracter viene como un Word8. La idea es tener un par de funciones, cualesquiera, que realicen la codificación y decodificación de un caracter, pudiendo además usar la información de cuál es su posición módulo 3 en el string.
Por ejemplo, la función encodeWord más simple posible sería la que no hace nada y deja el caracter como está:
encodeWord c _ = c
Otra un poco más compleja:
encodeWord c p = mod (c + p) maxBound
Bien. Ahora entiendo el rol de encodeWord y decodeWord.
La duda que me queda es "El caracter viene como un Word8". No logro obtener el contenido del archivo como una lista de [Word8].
En principio, para la función encode pensé algo así
encode inputFile outputFile = do
fileString <- readFile inputFile
...
writeFile outputFile $ encodeString fileString
El problema que veo es que fileString es de tipo String o ByteString (según si uso readFile de Prelude o de ByteString), pero no es un [Word8]. No encontré ninguna función que lea un archivo y lo retorne como una lista de Word8 (busqué en Hoogle el tipo FilePath -> [Word8], sin resultados). La única solución que se me ocurre es leer el archivo como String usando readFile y convertir cada Char en Word8, pero para la conversión hay que usar unsafeCoerce.
Tal vez el ejercicio va por otro lado...
Podés definir una función de conversión:
wordToChar :: Word8 -> Char
wordToChar = toEnum . fromEnum
Perdón, lo que querías era:
charToWord :: Char -> Word8
charToWord = toEnum . fromEnum
Genial. Eso resuelve el problema que tenía.
Gracias!