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 |
<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 $ |
||
[1 .. 0x10ffff] |
|||
>>= ((\c -> [c | isPrint c]) . chr) |
|||
) |
) |
||
Line 578: | Line 580: | ||
main :: IO () |
main :: IO () |
||
main = |
main = |
||
let label k = unlines . (k :) |
|||
in (putStrLn . uncurry (<>)) $ |
|||
⚫ | |||
bimap |
|||
<$> [("Upper:", fst), ("Lower:", snd)]</lang> |
|||
(label "Upper:") |
|||
(label "\nLower:") |
|||
⚫ | |||
{{Out}} |
{{Out}} |
||
<pre>Upper: |
<pre>Upper: |