I've been doing it as the enclosed. I wrote it a while ago, though, and
haven't really looked too hard at it since.

-- Mark
module WordWrap (wrap) where
import Data.Maybe

options :: String -> [(String, String)]

options [] = [("", "")]

options (x:xs) =
    let rest = map (\(ys, zs) -> (x:ys, zs)) (options xs)
     in if x == ' ' then ("", xs) : rest else rest

bestSplit :: Int -> String -> (String, String)

bestSplit width string =
    last (head wraps : takeWhile ((<= width) . length . fst) (options string))

wrap :: Int -> String -> [String]

wrap _ "" = []

wrap width string =
    let (x, ys) = bestSplit width string
     in x : wrap width ys
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to