fork(1) download
  1. import Data.Ratio
  2.  
  3. myEnumFromThen :: (Fractional a) => a -> a -> [a]
  4. myEnumFromThen n m = n `seq` m `seq` (n : myEnumFromThen m (m+m-n))
  5.  
  6. myEnumFromThenTo :: (Ord a, Fractional a) => a -> a -> a -> [a]
  7. myEnumFromThenTo e1 e2 e3
  8. = takeWhile predicate (myEnumFromThen e1 e2)
  9. where
  10. predicate | e2 >= e1 = (<= e3)
  11. | otherwise = (>= e3)
  12.  
  13. main = do
  14. print $ (myEnumFromThenTo 1.5 1.8 2.999999999999999 :: [Float])
  15. print $ (myEnumFromThenTo 1.5 1.8 2.99999999999 :: [Ratio Int])
  16. print $ (myEnumFromThenTo 1.5 1.8 2.999999999 :: [Ratio Int])
  17. print $ (myEnumFromThenTo 1.5 1.8 2.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 :: [Ratio Integer])
  18. print $ (myEnumFromThenTo 0 (1%3) 2.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 :: [Ratio Integer])
  19. print $ (myEnumFromThenTo 0 (1%3) 3.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 :: [Ratio Integer])
  20. print $ (myEnumFromThenTo 0 (1%3) 3.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 :: [Ratio Integer])
Success #stdin #stdout 0.02s 3656KB
stdin
Standard input is empty
stdout
[1.5,1.8,2.1,2.3999999,2.6999998,2.9999998]
[]
[3%2,9%5,21%10,12%5]
[3%2,9%5,21%10,12%5,27%10]
[0%1,1%3,2%3,1%1,4%3,5%3,2%1,7%3,8%3]
[0%1,1%3,2%3,1%1,4%3,5%3,2%1,7%3,8%3,3%1]
[0%1,1%3,2%3,1%1,4%3,5%3,2%1,7%3,8%3,3%1]