Hi, I'm writting a small parser in Haskell and, when it is all done, I get
the following problem: Type Binding.
The thing is, I have 3 main functions:
1) Read the file, its type is: [Char] ->IO [Char] (see InputOutput.hs)
2) Parse a string (using words and readDec), its type is: Integral a =>
[Char] -> [a] (see Parse.hs)
3) Parse a list of integer, its type is: [Float] -> [[Float]]
(Functions.hs)
Now the problem is that I cannot run the first function, then use its
results as an input of the second function and, finally, its results as
the input of the third function.
How can I fix this without modifing all my functions because they,
independly, works fine.
Juan
From [EMAIL PROTECTED] Thu Feb 14 16:53:00 2002
Date: 08 Feb 2002 15:21:41 -0300
From: Maxi Combina <[EMAIL PROTECTED]>
To: Juan M. Duran <[EMAIL PROTECTED]>
Subject: Re: Problems
ya deberiamos cambiar el subject, no?
pero asi esta bueno!
El jue, 07-02-2002 a las 09:37, Juan M. Duran escribi�:
> Antes que me olvide, necesito:
> - La cancion que hicimos (quiero que la lea la Cari)
bueno, te la adjunto (es un .doc).
fijate que la acabo de abrir con soffice (si, porque el modem desde win
no quiere andar mas... te acordar que ya el a�o pasado te habia
preguntado por el asunto? resulta que cuando uno reinstala win, no
quiere andar. tenes que renegar un monton hasta que de algun modo
empieza a andar)
Bueno, el punto que el soffice no me muestra el ultimo renglon de la
cancion. No se si �l lo ve mal o si realemente no esta. Por las dudas te
mando la ultima estrofa (que incluye --obviamente-- el �ltimo renglon:
Un consejo muy piola
queremos darte
no vengas a este lugar
a congelarte
> - El temita ese del mp3 en linux, recuerda?, bueno, me diste un executable
> que no se que hacia (algo con la dma), bueno, ese ejecutable no existe,
> por lo menos en mi computador.
ops, entonces no sera eso. de todos modos, ese ejecutable esta muy bueno
para modificar el comportamiento del duro. es parte de un paquete que se
llama hdparm (asi tambien se llama el ejecutable). en tu cd de mdk 8.0
seguro que esta, sino, en la red.
> - Me estan ensenhando a tocar la guitarra, estoy realmente practicando y
> me gusta, ya se algunos acordes, los basicos vio (Do, Re, Mi, Sol, La) y
> ni siquiera son todos, je je. En fin, te acordas cuando me dabas clases,
> habias dicho que existia algo (no se, creo que era #) que era
> indempotente, si te acordas decimelo porque estoy meta y meta discutir con
> cari sobre eso, solo que no recuerdo lo que era. AH, si tenes los acordes
> de alguna cancion conocida por mi y que sea facil, mandalo.
no, idempotente no era, ya que un operador idempotene (llamemosle E)
tiene la propiedad de que EoE=E (lease E compuesto con E igual a E).
Ese bicho que decis (#) es el sostenido. Provoca que la nota a la cual
se le aplique se eleve en 1/2 tono. A ver: la nota Do es la nota Do y
punto. La nota #do es do + 1/2 tono. Si se trata de un acorde (conjunto
de notas), entonces el # provoca que todas sus notas se eleven 1/2 tono.
Por ejemplo: el acorde DO mayor esta compuesto por 3 notas: do, mi y sol
por lo tanto, #DO sera: do#, fa y sol# (notar que no puse #mi, ya que
#mi=fa) (notar que en minusculas estan las notas y en mayusculas los
acordes)
El complemento de # es el bemol (no me da el teclado para dibujarlo). Lo
que hace el bemol es restar 1/2 tono en vez de sumar.
El # y el bemol son aditivos, i.e., ##do=#(#do)=do + 1/2 tono + 1/2
tono=re.
por ejemplo: #(bemol)do=do - 1/2 tono + 1/2 tono=do
bemol(fa)=fa - 1/2 tono = mi
ah, �sta es la tabla de notas (se indica en terminos de #):
do #do re #re mi fa #fa sol #sol la #la si do
notar que todos tienen # salvo mi (ya que #mi=fa) y si (pues #si=do)
Antes de mandarte una cancion, te mando la notacion usual (se llama
notacion americana, creo). La idea es no escribir tanto (DO mayor, RE
menor, etc.... son demasiadas letras).
Primero, una tabla de equivalencia: (by heart, man)
DO = C
RE = D
MI = E
FA = F
SOL = G
LA = A
SI = B
Si ponemos C sin ningun "aditivo", entonces es un DO mayor,.
para indica el menor (DO menor), ponemos Cm.
La septima: C7
Cambiar el bajo: D/F# (esto es, RE con bajo #FA)
etc
Una cancion facil: acabo de sacar losing my religion:
Intro: F - Am - F - AM - G
(no s� la letra)
estrofa: Am - Em un par de veces (no se cuantas exactamente)
Dm - G - Am
bueno, escuchala.
una mas facil:
Mujer amante:
=============
NOTACION= entre parentesis el acorde adecuado en el momento adecuado ;-)
Intro: la obviamos, no calienta.
Empezar en Bm
Siento el calor de toda tu (G) piel en mi cu(A)erpo otra vez
Est(Bm)rella fugaz enci(D)ende mi (A) sed, misteriosa mujer
por tu am(G)or sensual cuanto me (Bm)das?
Haz que mi (A) sue�o (Em) sea un(D)a verdad
dame tu (G) alma hoy hacia el ri(Bm)tual
Ll�vame al (A) mundo (Em) donde (F#) pueda son�ar
(Bm)Uhhhh (D)debo saber si es (A)verdad
en algun (Bm)lado estas
Voy a buscar u(D)na se�al (A) una cancion(Bm)
(Bm)Uhhhh (D)debo saber si es (A)verdad
en algun (Bm)lado estas
S�lo el amor (D)que tu me das(A) me ayudara Bm - A - G - Em
[lo que sigue es igual - te mando la letra]
Al amanecer tu imagen se va, misteriosa mujer
dejaste en mi, lujuria total hermosa sensual
corazon sin dios, dame un lugar
en este mundo tibio casi irreal
te vere buscar una se�al
en aquel camino por el que vas
Uhhhh, debo...
...
... me ayudara
SOLO DE GUITARRA
(podes tocas los acordes de una estrofa) (habria que escuchar qu�
acordes hace don rata blanca)
(G)Tu presencia marco en mi vida el (Bm) amor, lo s�
(A)es dificil pensar(Em) en vivir ya sin (D)vos
(G) corazon sin dios, dame(Bm) un lugar
(A)en se mundo (Em) tibio casi irr(F#)eal
uhh, debo saber...
etc etc
listo, espero que entiendas algo ;-)
> Un abrazo
>
> Juan
>
> PD: Como es el tema de las inscripciones, digo, cuando son?
no tengo idea. aun no fui a cba, estoy estudiando alguito aca en casa.
bueno, tarde un monton de tiempo en escribir tu maldita cancion, asi que
me voy a renegar con el modem.
ah, tenfgo shrek rippeada, pronto la pasare a CD.
un abrazo grande
maxi
pd: disculpa la falta de novedades. no hay muchas...
--
Si supieras lo que he visto ...
si supieras lo que he tocado...
J.D.
[ Part 2, Application/MSWORD 48KB. ]
[ Unable to print this part. ]
module InputOutput where
import IO
import Parser
-- OUTPUT
output outfile result = do
writeFile outfile (show result)
putStr ("Writing in file " ++ "'" ++ outfile ++ "'"
++ " done.\n")
-- INPUT
input infile = do
hdl <- openFile infile ReadMode
content <- hGetContents hdl
return content
module Functions where
map' f [] = []
map' f (t:u:v:w:x:y:z:xs) = f t u v w x y z:map' f xs
operation a b c d e f g = do
r <- (out [a,b,c,d,e,f])
if (r == g) then
return r else return (abs (r-g))
control xs
| (mod (length xs) 7) == 0 = map' operation' xs
| otherwise = error "Incorrect size of vector"
-- FUNCTION 'OUT'
out [a, b, c, d, e, f] = [ divicao [divicao [soma [resta [soma [a,b], c], d], e], f]
]
-- FUNCTION DECLARATION
soma :: [Float] -> Float
soma [x, y] = x + y
resta :: [Float] -> Float
resta [x, y] = x - y
divicao :: [Float] -> Float
divicao [a, b]
| b == 0 = error "Division by zero"
| otherwise = a / b
operation' a b c d e f g = out [a,b,c,d,e,f]
module Parser where
parser xs = parser0 (words xs)
parser0 [] = []
parser0 (x:xs) = ifNegative x:parser0 xs
ifNegative (x:xs) = if (x == '-') then (negative xs) else (nonNegative (x:xs))
negative xs = (0 - fst (readDec xs!!0))
nonNegative xs = fst (readDec xs!!0)