Haskellのお勉強(2) 文字列のsplit

split

ちょっとずつHaskellに馴染んでいくためのいいかげんなお勉強。今日のお題は文字列のsplitだよ。あんちょこにググってみたらそのものの例があったんで試してみるよ。参考にしたのはHow to split a string in Haskell? - Stack Overflow

import System.Environment   
import Text.Printf
import Data.List.Split

main = do
    print $splitOn " " "abc def 123 1.5"

早速動かしてみたよ。

~/haskell$ runghc strsplit.hs 

strsplit.hs:3:1: error:
    Failed to load interface for ‘Data.List.Split’
    Use -v to see a list of the files searched for.
~/haskell$

ありゃ、なんかエラーが出た。参考にしたページをもう一回良く見てみたら、パッケージの導入が必要だったよ。ちろちろと斜め読みしたんで肝心なとこ見逃してた。

cabal

どうやらcabalってのがHaskellのパッケージ管理コマンドみたい。GHCをインストールしただけじゃこのコマンドは入ってなかったよ。というわけでまずcabalをインストールした。その後、splitパッケージをインストール。

~/haskell$ cabal update
Config file path source is default config file.
Config file /home/xxx/.cabal/config not found.
Writing default configuration to /home/xxx/.cabal/config
Downloading the latest package list from hackage.haskell.org
~/haskell$ cabal install split
Resolving dependencies...
Downloading split-0.2.3.3...
cabal: Entering directory '/tmp/cabal-tmp-11850/split-0.2.3.3'
Configuring split-0.2.3.3...
Building split-0.2.3.3...
Preprocessing library split-0.2.3.3...
[1 of 2] Compiling Data.List.Split.Internals ( src/Data/List/Split/Internals.hs, dist/build/Data/List/Split/Internals.o )
[2 of 2] Compiling Data.List.Split  ( src/Data/List/Split.hs, dist/build/Data/List/Split.o )
Creating package registration file:
/tmp/pkgConf-split-0.2.32145174067468703135.3
Installing library in
/home/xxx/.cabal/lib/x86_64-linux-ghc-8.0.2/split-0.2.3.3-KPq5EVv6rbi8XHTA0KJd3E
Registering split-0.2.3.3...
cabal: Leaving directory '/tmp/cabal-tmp-11850/split-0.2.3.3'
Installed split-0.2.3.3
~/haskell$

まずcabal updateしてからお目当てのsplitをインストールしたんだけど、この手順で良いのかな。

~/haskell$ runghc strsplit.hs 
["abc","def","123","1.5"]
~/haskell$

お、動いた。動いたってことはちゃんとインストールされたってことかな。(いいかげんだな)

splitパッケージ

splitの詳細はData.List.Splitにあったよ。今回使ったsplitOn以外にも色々あるみたいだね。どういう実装になってるのか興味あるけど、今の知識じゃ中見ても理解できないだろうなあ。将来の課題にとっておこう。

雑感

今回は思いがけずパッケージの導入することになったけど、cabalっての知れたし結果的には良かったかな。他にも有用なパッケージがあるのかな。定番のパッケージの解説とかどっかに転がってないかなあ。