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