diff options
| author | tv <tv@krebsco.de> | 2026-03-07 23:28:58 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-03-08 04:01:23 +0100 |
| commit | ae9f49e0a6e7d5a0c906d8e4fd153ad553cdecf1 (patch) | |
| tree | 8dbb213f5796da9215742afa9d30682e3dcc5dd0 /src/Blessings/String/WCWidth.hs | |
| parent | a6dd9834628614c0b7c815165bc0cf4139131b8c (diff) | |
use mono-traversable
Diffstat (limited to 'src/Blessings/String/WCWidth.hs')
| -rw-r--r-- | src/Blessings/String/WCWidth.hs | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/src/Blessings/String/WCWidth.hs b/src/Blessings/String/WCWidth.hs deleted file mode 100644 index 16ab853..0000000 --- a/src/Blessings/String/WCWidth.hs +++ /dev/null @@ -1,66 +0,0 @@ -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE ImportQualifiedPost #-} -{-# LANGUAGE MultiWayIf #-} -{-# LANGUAGE PatternGuards #-} -{-# OPTIONS_GHC -fno-warn-orphans #-} -module Blessings.String.WCWidth - ( module Blessings - ) where - -import Blessings -import Blessings.Internal -import Data.Char.WCWidth qualified as WCWidth -import Data.List qualified as List - - -instance Blessable String where - length = length' - drop = drop' - take = take' - splitAt = splitAt' - break = List.break - intercalate = List.intercalate - fromWord8 = Prelude.show - show = Prelude.show - - -length' :: String -> Int -length' = foldr ((+) . wcwidth') 0 - -drop' :: Int -> String -> String -drop' k t = - if k <= 0 - then t - else - case t of - c : t' -> - drop' (k - wcwidth' c) t' - [] -> mempty - -take' :: Int -> String -> String -take' k0 = - rec k0 - where - rec k t = - if | (c : t') <- t, nc <- wcwidth' c, nc <= k -> - c : rec (k - nc) t' - - | otherwise -> - [] - -splitAt' :: Int -> String -> (String, String) -splitAt' k0 = - rec k0 [] - where - rec k a t = - if | (c : t') <- t, nc <- wcwidth' c, nc <= k -> - rec (k - nc) (c : a) t' - - | otherwise -> - (reverse a, t) - --- TODO this breaks when WCWidth.wcwidth returns -1, which happens for --- non-printable characters like '\n'. --- Following wcwidth' isn't entirely correct because WCWidth.wcwidth '\0' == 0 -wcwidth' :: Char -> Int -wcwidth' = max 1 . WCWidth.wcwidth |
