Haskellでコマンドを使えるShellyというものを試したのでメモ
Sat Sep 13 16:55:52 JST 2014 (modified: Sun Oct 1 10:50:27 JST 2017)
views: 2357, keywords:コマンド,CLI,Haskell,Mac,Shelly,言語好きは面倒を問題としないのか この記事は最終更新日が7年以上前のものです。
始めてこの分野で論文を書くための調査メモです。はいはい、サーベイサーベイ・・・。
https://hackage.haskell.org/package/shelly
理屈は使ってから考える人間なので、とりあえず理屈抜きで使ってみたので手順を磔の刑に処します。
いんすとーる
試すのはMacの上です。Haskell入ってない場合はここを参考に。
uedambp:~ ueda$ cabal install shelly
(中略)In-place registering shelly-1.5.5...
Installing library in /Users/ueda/.cabal/lib/shelly-1.5.5/ghc-7.6.3
Registering shelly-1.5.5...
Installed shelly-1.5.5
とりあえずほぼ最小のものを書いてみる
シェルの
echo aho $
に相当するものを書いてみました。テキストをしかるべき型に変換しないと使えません。これは面倒だ。面倒というよりわけが分からなかったのでこれを参考にしました。
:~ ueda$ cat echo.hs
uedambpimport Shelly
import Data.Text hiding (map)
= shelly $ do run echo args
main where echo = (fromText . pack) "echo"
= map pack ["aho"] args
はいはい、実行実行。
uedambp:~ ueda$ ghc echo.hs
1 of 1] Compiling Main ( echo.hs, echo.o )
[Linking echo ...
uedambp:~ ueda$ ./echo
aho
引数をコマンドラインから読み込めるようにする
:~ ueda$ cat echo-args.hs
uedambpimport System.Environment
import Shelly
import Data.Text hiding (map)
= main' =<< getArgs
main
= shelly $ do run echo args
main' as where echo = (fromText . pack) "echo"
= map pack as args
はい実行。
uedambp:~ ueda$ ./echo-args This is a pen.
This is a pen.
感想
面倒。
以上。
その後
@ruiccさんの親切なインストラクションで次のように書けば香具師の型ヌキみたいな酷い目に合わないとのことです。(もっと簡単になるかもしれません。)
プラグマ芸ですな・・・。
:~ ueda$ cat echo-args.hs
uedambp{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
import System.Environment
import Shelly
import qualified Data.Text as T
T.Text)
default (
= main' =<< getArgs
main
= shelly $ do run "echo" (map T.pack as) main' as
関数はスッキリします。ヘッダが・・・。
うーーーーーーーーん。