計算機科学のブログ

HaskellのI/O テキストとUnicodeの操作 Data.Textを使用する 基本的なテキストユーティリティT.splitOnによるT.lines関数、T.intercalateによるT.unlines関数の実装

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT4(HaskellのI/O)、LESSON23(テキストとUnicodeの操作)、23.2(Data.Textを使用する)、基本的なテキストユーティリティ、クイックチェック 23-3の解答を求めてみる。

コード

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Text as T

myLines :: T.Text -> [T.Text]
myLines = T.splitOn "\n"

myUnlines :: [T.Text] -> T.Text
myUnlines = T.intercalate "\n"

text :: T.Text
text = "abcde \nfg \nh\n"

ls :: [T.Text]
ls = myLines text

main :: IO ()
main = do
  print text
  print ls
  print $ myUnlines ls

入出力結果(Terminal, Zsh)

% runghc sample03.hs
"abcde \nfg \nh\n"
["abcde ","fg ","h",""]
"abcde \nfg \nh\n"
%