[Haskell-beginners] matching the output of a standard function to my function definition (non-exhaustive pattern problem)

Martin Tomko martin.tomko at geo.uzh.ch
Mon Sep 27 11:41:24 EDT 2010


Dear all

I am sure this is a very beginner problem, but I am not sure how to 
solve it:
I have a myFunct function:
myFunct :: Int -> [a] -> a

defined as:
myFunct _ [] = error "empty list provided as arg"
myFunct a [b] | length [x|x<-[b],fid x == a] == 0 = error "no match"
                       |    otherwise = head [x|x<-[b],fid x == a]


Which works fine (may not be elegant, but works). Now, I am chaining it 
in a larger function, where at some stage I use a graph object from 
Data.Graph and check for its edges, resulting in [(Int,Int)]
trying to run this fails:

  myFunct (fst (head (edges graph))) myList

*** Exception: FunctStruct.hs:(136,1)-(138,48): Non-exhaustive patterns 
in function myFunct

contrived example, but myList is a list of [a]). The problem arrises 
from the definition of the type of Edge as (Vertex,Vertex), but type 
Vertex = Int 
(http://hackage.haskell.org/packages/archive/containers/0.2.0.1/doc/html/Data-Graph.html), 
so that should be ok, or am I making a mistake somewhere and I should go 
from vertex to Integer explicitly?

Thanks a lot!
Martin


More information about the Beginners mailing list