Another fold question
Thomas L. Bevan
thomas_bevan at toll.com.au
Thu Nov 6 15:41:32 EST 2003
patty,
what you have written is not a fold. A fold operates over a list. There is no
list in your code, only some sort of tree structure.
> foldMusic :: (Pitch -> Octave -> Duration -> a)
> -> (Duration -> a)
> -> (a -> a -> a)
> -> (a -> a -> a)
> -> (Ratio Int -> a -> a)
> -> Music
> -> a
>
> I understand that when i use the foldMusic function i need to pass it 5
> parameters. given the type signiature, why can i pass (+) as a parameter
> for p1 but not for n, what determines what can be passed as a parameter,
> because they all have the return type a??
The first argument of your function is of type, (Duration -> a)
(+) has the type, a -> a -> a, so it is nothing like the first argument.
countNotes :: Music -> Int
countNotes Silence _ = 0
countNotes Note_ = 1
countNotes PlayerPar m1 m2 = (countNotes m1) + (countNotes m2)
countNotes PlayerSeq m1 m2 = (countNotes m1) + (countNotes m2)
countNotes Tempo _ m = countNotes m
Tom
More information about the Haskell-Cafe
mailing list