haskellで簡易lsを作る
苦労の末に
Prelude System.Directory> getDirectoryContents "/" >>= return.concatMap (++" ") >>= putStrLn bin lib sbin sys selinux vmlinuz . root boot usr srv cdrom vmlinuz.old initrd.img var tmp dev media opt proc mnt initrd.img.old home lost+found etc ..
やっと、 >>= とreturnの意味がわかったような気がする。
g >>= \x -> return f x
は
g >>= return.f
でいいのか。合成関数の使いどころってすごいな。あれ?こいつをdoで書くとどうなるんだろう。
$ runghc -e 'import System.Directory; main=getDirectoryContents "/" >>= return.(concatMap (++" ")).filter (`notElem` [".",".."]) >>= putStrLn' bin lib sbin sys selinux vmlinuz root boot usr srv cdrom vmlinuz.old initrd.img var tmp dev media opt proc mnt initrd.img.old home lost+found etc
doでかきなおすと
$ runghc -e 'import System.Directory; main=do{ d<-do{g<-getDirectoryContents "/"; (return.(concatMap (++" ")).filter (`notElem` [".",".."])) g} ; putStrLn d}' bin lib sbin sys selinux vmlinuz root boot usr srv cdrom vmlinuz.old initrd.img var tmp dev media opt proc mnt initrd.img.old home lost+found etc