Haskellでコマンドを使えるShellyというものを試したのでメモ

Sat Sep 13 16:55:52 JST 2014 (modified: Sun Oct 1 10:50:27 JST 2017)
views: 2305, 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

に相当するものを書いてみました。テキストをしかるべき型に変換しないと使えません。これは面倒だ。面倒というよりわけが分からなかったのでこれを参考にしました。

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)

関数はスッキリします。ヘッダが・・・。

うーーーーーーーーん。

ノート   このエントリーをはてなブックマークに追加 
 

prev:Structure and Interpretation of Computer Programs読書会22回目メモ書き next:最近の活動

やり散らかし一覧

記事いろいろ