Making my own type belong to Data.Ord

Hi, I'm trying to follow the "Real World Haskell" book online and have reached exercise 12 in chapter three. See the bottom of http://book.realworldhaskell.org/read/defining-types-streamlining-functions.... for reference. It's the very last exercise on the page concerning constructing a Convex Hull. I have no problem implementing a Graham Scan in non-functional languages as i have far more experience with those. But the book hasn't yet covered how i make my own data belong to for example the Data.Ord class. The question then for me is how am i supposed to sort my coordinates? Type classes are not covered for another three chapters in the book. Given this it seems to me that i should be able to solve this without using Data.Ord, i just cannot see how. Any pointers would be highly appreciated. -- Patrik Iselind

On Sat, Jan 20, 2018 at 09:20:33PM +0100, Patrik Iselind wrote:
It's the very last exercise on the page concerning constructing a Convex Hull. I have no problem implementing a Graham Scan in non-functional languages as i have far more experience with those. But the book hasn't yet covered how i make my own data belong to for example the Data.Ord class. The question then for me is how am i supposed to sort my coordinates?
Type classes are not covered for another three chapters in the book. Given this it seems to me that i should be able to solve this without using Data.Ord, i just cannot see how. Any pointers would be highly appreciated.
Hello Patrik, as you suggested, implementing an instance of Data.Ord would be ok; if you don't want that, just write a myTypeCompare :: SomeData -> SomeData -> Ordering function to use with `sortBy` from `Data.List`. Does that make sense? -F

Den 2018-01-20 kl. 21:27, skrev Francesco Ariis:
On Sat, Jan 20, 2018 at 09:20:33PM +0100, Patrik Iselind wrote:
It's the very last exercise on the page concerning constructing a Convex Hull. I have no problem implementing a Graham Scan in non-functional languages as i have far more experience with those. But the book hasn't yet covered how i make my own data belong to for example the Data.Ord class. The question then for me is how am i supposed to sort my coordinates?
Type classes are not covered for another three chapters in the book. Given this it seems to me that i should be able to solve this without using Data.Ord, i just cannot see how. Any pointers would be highly appreciated. Hello Patrik, as you suggested, implementing an instance of Data.Ord would be ok; if you don't want that I wouldn't mind writing it, at all. It's probably the way i would do it if i knew more Haskell. My problem is just that the book i follow hasn't covered that topic yet, so even if i could google how to do it i guess i shouldn't until the book has covered the topic.
As i understand it this would be the 'preferred' way in the real world, is this correctly understood?
, just write a
myTypeCompare :: SomeData -> SomeData -> Ordering
function to use with `sortBy` from `Data.List`. Does that make sense? That would make sense, i seem to remember something along those lines from previous topics covered in the book.
Thanks a lot Francesco, much appreciated! // Patrik
participants (2)
-
Francesco Ariis
-
Patrik Iselind