
I have been working on a small library that will typeset notes in LaTeX for me, since I tend to have haphazard typesetting while I write, but while I read I like to have standards. Anyways, I defined a datatype data Color = RGB { name :: [Char], r :: Float, g :: Float, b :: Float, matchText :: [[Char]], targetText :: [Char]} deriving(Show,Eq,Read) I wanted to be able to have a piece of code that said "\\definecolor{"++name++"}{rgb}{"++show r++","++show g++","++show b++"}" but because I have numbers below 0.1, it outputs as 2.0e-2, which is useless. I wrote a function that would output useful numbers, but it's REALLY bad Haskell: fToInt :: Float -> Int fToInt f = if f >= 10 then fToInt (f-10.0) else if (f >= 9) then 9 else if (f >= 8) then 8 else if (f >= 7) then 7 else if (f >= 6) then 6 else if (f >= 5) then 5 else if (f >= 4) then 4 else if (f >= 3) then 3 else if (f >= 2) then 2 else if (f >= 1) then 1 else 0 It takes up 11 lines in a module that's only got 74! (128 if you count the module to translate the notes into a .tex file) how would I write this better?

Look at the 'floor' function. It would simplify a lot of cases for sure. But I suspect there is a better way to do that function as a whole. On 2009-11-06, at 12:31 AM, Nathan M. Holden wrote:
I have been working on a small library that will typeset notes in LaTeX for me, since I tend to have haphazard typesetting while I write, but while I read I like to have standards.
Anyways, I defined a datatype
data Color = RGB { name :: [Char], r :: Float, g :: Float, b :: Float, matchText :: [[Char]], targetText :: [Char]} deriving(Show,Eq,Read)
I wanted to be able to have a piece of code that said
"\\definecolor{"++name++"}{rgb}{"++show r++","++show g++","++show b++"}"
but because I have numbers below 0.1, it outputs as 2.0e-2, which is useless. I wrote a function that would output useful numbers, but it's REALLY bad Haskell:
fToInt :: Float -> Int fToInt f = if f >= 10 then fToInt (f-10.0) else if (f >= 9) then 9 else if (f >= 8) then 8 else if (f >= 7) then 7 else if (f >= 6) then 6 else if (f >= 5) then 5 else if (f >= 4) then 4 else if (f >= 3) then 3 else if (f >= 2) then 2 else if (f >= 1) then 1 else 0
It takes up 11 lines in a module that's only got 74! (128 if you count the module to translate the notes into a .tex file)
how would I write this better? _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
participants (2)
-
iæfai
-
Nathan M. Holden