diff options
Diffstat (limited to 'lib/Data/Packed/Internal/Common.hs')
-rw-r--r-- | lib/Data/Packed/Internal/Common.hs | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/lib/Data/Packed/Internal/Common.hs b/lib/Data/Packed/Internal/Common.hs index 972cd7d..bfa63f1 100644 --- a/lib/Data/Packed/Internal/Common.hs +++ b/lib/Data/Packed/Internal/Common.hs | |||
@@ -18,8 +18,9 @@ module Data.Packed.Internal.Common( | |||
18 | Adapt, | 18 | Adapt, |
19 | app1, app2, app3, app4, | 19 | app1, app2, app3, app4, |
20 | (//), check, | 20 | (//), check, |
21 | partit, common, compatdim, | 21 | splitEvery, common, compatdim, |
22 | fi | 22 | fi, |
23 | table | ||
23 | ) where | 24 | ) where |
24 | 25 | ||
25 | import Foreign | 26 | import Foreign |
@@ -27,11 +28,12 @@ import Control.Monad(when) | |||
27 | import Foreign.C.String(peekCString) | 28 | import Foreign.C.String(peekCString) |
28 | import Foreign.C.Types | 29 | import Foreign.C.Types |
29 | import Foreign.Storable.Complex() | 30 | import Foreign.Storable.Complex() |
31 | import Data.List(transpose,intersperse) | ||
30 | 32 | ||
31 | -- | @partit 3 [1..9] == [[1,2,3],[4,5,6],[7,8,9]]@ | 33 | -- | @splitEvery 3 [1..9] == [[1,2,3],[4,5,6],[7,8,9]]@ |
32 | partit :: Int -> [a] -> [[a]] | 34 | splitEvery :: Int -> [a] -> [[a]] |
33 | partit _ [] = [] | 35 | splitEvery _ [] = [] |
34 | partit n l = take n l : partit n (drop n l) | 36 | splitEvery k l = take k l : splitEvery k (drop k l) |
35 | 37 | ||
36 | -- | obtains the common value of a property of a list | 38 | -- | obtains the common value of a property of a list |
37 | common :: (Eq a) => (b->a) -> [b] -> Maybe a | 39 | common :: (Eq a) => (b->a) -> [b] -> Maybe a |
@@ -47,6 +49,15 @@ compatdim [] = Nothing | |||
47 | compatdim [a] = Just a | 49 | compatdim [a] = Just a |
48 | compatdim (a:b:xs) = if a==b || a==1 || b==1 then compatdim (max a b:xs) else Nothing | 50 | compatdim (a:b:xs) = if a==b || a==1 || b==1 then compatdim (max a b:xs) else Nothing |
49 | 51 | ||
52 | -- | Formatting tool | ||
53 | table :: String -> [[String]] -> String | ||
54 | table sep as = unlines . map unwords' $ transpose mtp where | ||
55 | mt = transpose as | ||
56 | longs = map (maximum . map length) mt | ||
57 | mtp = zipWith (\a b -> map (pad a) b) longs mt | ||
58 | pad n str = replicate (n - length str) ' ' ++ str | ||
59 | unwords' = concat . intersperse sep | ||
60 | |||
50 | -- | postfix function application (@flip ($)@) | 61 | -- | postfix function application (@flip ($)@) |
51 | (//) :: x -> (x -> y) -> y | 62 | (//) :: x -> (x -> y) -> y |
52 | infixl 0 // | 63 | infixl 0 // |