計算機科学のブログ

HaskellのI/O テキストとUnicodeの操作 Data.Textを活用する 言語拡張、OverloadedStrings、基本的なテキストユーティリティ、splitOn関数とintercalate関数によるlines関数とunlines関数の独自実装

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

コード

{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T

-- クイックチェック23-1
fourWord :: T.Text
fourWord = T.pack (T.unpack (T.pack "pessimism"))

-- クイックチェック23-3
myLines :: T.Text -> [T.Text]
myLines = T.splitOn "\n"

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

text :: T.Text
text = "line1\nline2\nline3"

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

text1 :: T.Text 
text1 = myUnlines lines1

入出力結果(Terminal, Zsh)

% ghci
GHCi, version 8.10.5: https://www.haskell.org/ghc/  :? for help
Loaded package environment from /.../.ghc/x86_64-darwin-8.10.5/environments/default
macro 'doc' overwrites builtin command.  Use ':def!' to overwrite.
(0.00 secs, 0 bytes)
(0.00 secs, 0 bytes)
Loaded GHCi configuration from /.../.ghc/ghci.conf
Prelude
λ> :load sample01.hs 
[1 of 1] Compiling Main             ( sample01.hs, interpreted )
Ok, one module loaded.
(0.02 secs,)
*Main
λ> fourWord 
"pessimism"
it :: T.Text
(0.03 secs, 71,880 bytes)
*Main
λ> :load sample01.hs 
[1 of 1] Compiling Main             ( sample01.hs, interpreted )
Ok, one module loaded.
(0.03 secs,)
*Main
λ> text
"line1\nline2\nline3"
it :: T.Text
(0.02 secs, 77,712 bytes)
*Main
λ> lines1
["line1","line2","line3"]
it :: [T.Text]
(0.01 secs, 80,136 bytes)
*Main
λ> text1
"line1\nline2\nline3"
it :: T.Text
(0.01 secs, 77,616 bytes)
*Main
λ> :quit
Leaving GHCi.
%