The function as written assumes that if the first argument is not zero, then the second argument is nonempty. But if you try to take5 from a list of length 2 that way, you'll eventually be asking for `myTake 3 []`, which there's no way to evaluate.

On Sun, Dec 12, 2021 at 12:14 AM Galaxy Being <borgauf@gmail.com> wrote:
This code

myTakePM :: Int -> [a] -> [a]
myTakePM 0 _ = []
myTakePM n (x:xs) = x : myTakePM (n-1) xs


is bad because it allows 

myTakePM 4 [1,2,3]
 [1,2,3*** Exception: <interactive>:(395,1)-(396,41): Non-exhaustive patterns in function myTakePM

I knew it would not work, but why is it calling this essentially a partial function? How does it know this? Again, I expected an error, but what is this Non-exhaustive patterns in function myTakePM saying? Or, said another way, what exactly is non-exhaustive about this?
--

Lawrence Bottorff
Grand Marais, MN, USA
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


--
Jeff Brown | Jeffrey Benjamin Brown
LinkedIn   |   Github   |   Twitter  |  Facebook