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)

Reply via email to