Idiomatically determine all the lowercase and uppercase letters: Difference between revisions

Content added Content deleted
m (→‎{{header|Haskell}}: Preferred <$> to <&>)
(→‎{{header|Haskell}}: Tidied test with bimap)
Line 560: Line 560:


And if we want to generalise a little beyond a narrowly Anglo-Saxon notion of alphabets:
And if we want to generalise a little beyond a narrowly Anglo-Saxon notion of alphabets:
<lang Haskell>import Data.Bifunctor (second)
<lang Haskell>import Control.Monad (join)
import Data.Bifunctor (bimap, second)
import Data.Char (chr, isLower, isPrint, isUpper)
import Data.Char (chr, isLower, isPrint, isUpper)
import Data.List (partition)
import Data.List (partition)
Line 572: Line 573:
(fst . partition isLower)
(fst . partition isLower)
( partition isUpper $
( partition isUpper $
filter isPrint (chr <$> [1 .. 0x10ffff])
[1 .. 0x10ffff]
>>= ((\c -> [c | isPrint c]) . chr)
)
)


Line 578: Line 580:
main :: IO ()
main :: IO ()
main =
main =
mapM_ (putStrLn . unlines) $
let label k = unlines . (k :)
in (putStrLn . uncurry (<>)) $
(\(k, f) -> k : chunksOf 70 (f uppersAndLowers))
bimap
<$> [("Upper:", fst), ("Lower:", snd)]</lang>
(label "Upper:")
(label "\nLower:")
(join bimap (chunksOf 70) uppersAndLowers)</lang>
{{Out}}
{{Out}}
<pre>Upper:
<pre>Upper: