configurator / Data / Configurator.hs

Diff from to


 import Data.Monoid (mconcat)
 import Data.Text.Lazy.Builder (fromString, fromText, toLazyText)
 import Data.Text.Lazy.Builder.Int (decimal)
+import Data.Text.Lazy.Builder.RealFloat (realFloat)
+import Data.Ratio (denominator, numerator)
 import Prelude hiding (catch, lookup)
 import System.Environment (getEnv)
 import System.IO (hPutStrLn, stderr)
   interpret (Interpolate name) =
       case H.lookup name env of
         Just (String x) -> return (fromText x)
-        Just (Number n) -> return (decimal n)
+        Just (Number r)
+            | denominator r == 1 -> return (decimal $ numerator r)
+            | otherwise -> return $ realFloat (fromRational r :: Double)
+                           -- TODO: Use a dedicated Builder for Rationals instead of
+                           -- using realFloat on a Double.
         Just _          -> error "type error"
         _ -> do
           e <- try . getEnv . T.unpack $ name
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.