Show Floats

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Show Floats

Nathan M. Holden
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?
Reply | Threaded
Open this post in threaded view
|

Show Floats

iæfai
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
> [hidden email]
> http://www.haskell.org/mailman/listinfo/beginners