DigitGroup (empty) → 0.1.0.0
raw patch · 5 files changed
+149/−0 lines, 5 filesdep +basedep +splitsetup-changed
Dependencies added: base, split
Files
- CHANGELOG.md +5/−0
- DigitGroup.cabal +67/−0
- LICENSE +30/−0
- Numeric/DigitGroup.hs +45/−0
- Setup.hs +2/−0
+ CHANGELOG.md view
@@ -0,0 +1,5 @@+# Revision history for DigitGroup++## 0.1.0.0 -- YYYY-mm-dd++* First version. Released on an unsuspecting world.
+ DigitGroup.cabal view
@@ -0,0 +1,67 @@+-- Initial DigitGroup.cabal generated by cabal init. For further+-- documentation, see http://haskell.org/cabal/users-guide/++-- The name of the package.+name: DigitGroup++-- The package version. See the Haskell package versioning policy (PVP)+-- for standards guiding when and how versions should be incremented.+-- https://wiki.haskell.org/Package_versioning_policy+-- PVP summary: +-+------- breaking API changes+-- | | +----- non-breaking API additions+-- | | | +--- code changes with no API change+version: 0.1.0.0++-- A short (one-line) description of the package.+synopsis: Group the digits of numbers by lots++-- A longer description of the package.+-- description:++-- The license under which the package is released.+license: BSD3++-- The file containing the license text.+license-file: LICENSE++-- The package author(s).+author: Alan Hawkins++-- An email address to which users can send suggestions, bug reports, and+-- patches.+maintainer: w@xy30.com++-- A copyright notice.+-- copyright:++category: Math++build-type: Simple++-- Extra files to be distributed with the package, such as examples or a+-- README.+extra-source-files: CHANGELOG.md++-- Constraint on the version of Cabal needed to build this package.+cabal-version: >=1.10+++library+ -- Modules exported by the library.+ exposed-modules: Numeric.DigitGroup++ -- Modules included in this library but not exported.+ -- other-modules:++ -- LANGUAGE extensions used by modules in this package.+ -- other-extensions:++ -- Other library packages from which modules are imported.+ build-depends: base > 4 && <10000, split <10000++ -- Directories containing source files.+ -- hs-source-dirs:++ -- Base language which the package is written in.+ default-language: Haskell2010+
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2022, Alan Hawkins++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Alan Hawkins nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Numeric/DigitGroup.hs view
@@ -0,0 +1,45 @@+module Numeric.DigitGroup where++import Data.List+import Data.List.Split +import Data.Char+import Numeric++digitGroupIntegral :: Integral a => Char -> p -> a -> [Char]+digitGroupIntegral separator _ n = (if n < 0 then "-" else "") + ++ (reverse $ intercalate [separator] $ chunksOf 3 (reverse $ map (intToDigit . fromIntegral) $ nums n)) + where + nums x = reverse $ unfoldr (\x -> case divMod x 10 of { (0,0) -> Nothing ; (x,y) -> Just (y,x)}) x ++digitGroupRealFrac :: RealFloat a => Char -> Maybe Char -> a -> [Char]+digitGroupRealFrac separator1 separator2 n = (if n < 0 then "-" else "") + ++ reverse (intercalate [separator1] (chunksOf 3 $ reverse whole')) + ++ "." ++ intercalate separator2' (chunksOf 3 frac)+ where + separator2' = case separator2 of { (Just x) -> [x] ; _ -> [] } + whole' = if whole == [] then "0" else whole+ (whole,frac) = splitAt y digitString+ digitString = map intToDigit ( replicate (if y < 0 then abs y else 0 ) 0 ++ xs ++ replicate (y-length xs+if y >= 1 then 1 else 0 ) 0) + (xs,y) = floatToDigits 10 n+++class DigitGroupShow a where+ digitGroup :: Char -> Maybe Char -> a -> String++instance DigitGroupShow Integer where+ digitGroup separator _ x = digitGroupIntegral separator Nothing x++instance DigitGroupShow Int where+ digitGroup separator _ x = digitGroupIntegral separator Nothing x++instance DigitGroupShow Float where+ digitGroup separator1 separator2 x = digitGroupRealFrac separator1 separator2 x++instance DigitGroupShow Double where+ digitGroup separator1 separator2 x = digitGroupRealFrac separator1 separator2 x++digitGroupComma :: DigitGroupShow a => a -> String+digitGroupComma num = digitGroup ',' (Just ' ') num++digitGroupUnderScore :: DigitGroupShow a => a -> String+digitGroupUnderScore num = digitGroup '_' (Just '_') num
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain