2011-10-25 14 views
15

他の場所で何度も記述されているように(例:12、...)、haskellのスクリプトは非常に強力です。
また、簡単な方法はghc expression evaluation modeです。これは私が実際に使っているものです(私は本当にルビーのこの機能が好きです)。
少し例タスク:私は本当に詳細を知らないからでしょう
は「HEADと特定のリビジョン間のgitのdiffを含まれているすべてのフォルダを見つける」スクリプトのためのhaskellの式評価モード

git diff --stat 9e2b68 | ghc -e \ 
    "getContents >>= return.(Data.List.nub).map(fst.break('/'==).head.words).lines" 

これは、少し不格好に見えますghc -eを使用しています。
興味深い部分がちょうどnub.map(fst.break('/'==).head.words).linesであることを考えれば、実際の表現はちょっと気味悪いようです。

  • ghcに使用するモジュールについて教えてもらうにはどのようにすればいいですか?フルネームで修飾する必要はありませんか?
  • よく使うモジュールを含む設定ファイルをghcに送ってもらうことができますか?

私は、これらの種類のスクリプトに対して、私が使用する方法を改善するのに役立つ他の用途からいくつかの例を見ることに本当に感謝しています!

Sidenote:Commandline-fooのウィザードはおそらくこれを笑っているだろうが、私はhaskellとbashのスクリプトを使っているほうがずっと快適だと思う。モジュールについて

+0

文字列関数の場合、私は 'interact'という文字列は少し複雑であると感じます:' ghc -e "interact $ String func>" 'これは 'ghc -e 'が$ unlinesと対話することでよく終わります。map( String func>)。" – Nefrubyr

+1

gitとHaskellの両方のファンとして、 "コマンドラインfoo wizard"の大部分ではない、あなたのgit関連のHaskellスクリプトのリストを掲載するブログ記事は、間違いなく私にとって興味深いものです! – MatrixFrog

+1

@MatrixFrog gitに限らず、あなたにはまだ興味深いかもしれません:[GHC評価モードでのスクリプティング](http://blog.coldflake.com/post/12412650749/scripting-with-ghcs-evaluation-mode) – oliver

答えて

8

ghc -eはあなたの~/.ghciファイルを使用していますので、この場合には、あなたがそれに:m +Data.Listを追加したい(import Data.List(nub)もそうGHC 7またはので、サポートされています)。

パッケージについて:ghc-pkg hide somepackageghc-pkg expose somepackageを使用して、表示可能なパッケージのデフォルトセットを定義することができます(パッケージはデフォルトで公開されていますが、質問が誤解される可能性があります)。

eddieが便利です。

+0

.ghciファイル! 'ghc -e'が同じファイルを使うのを知らなかった。パッケージについては – oliver

+0

:いいえ、隠れていると露出は私の意味ではありませんでした。 – oliver

+1

についてeddie:本当にいいですね...キャバルインストールオプションもあります。テキストをテキストに変換する方法をまだ分かっていませんが、私は調査します。ところで... FunctorSalad ...非常に創造的な名前:) – oliver

5

FunctorSaladと同様に、ghc -e~/.ghciをロードするので、スクリプトで使用する定型文を追加することができます。あなたのケースでは、あなたがあなたに~/.ghciファイルを

let script f = getContents >>= return f 
import Data.List 

を追加して実行することができます:

git diff ... | ghc -e "script.nub.map(fst.break(=='/').head.words).lines" 
+0

+1:私は '((==)/)'がその質問で意味するはずだったのだろうかと思っていました。 – rampion

+0

nice!それは本当に便利です!先端のおかげで! – oliver

+0

'((==) '/')'は '( '/' ==)'と同じです。 – augustss

5

(離れて自分の世界〜/ .ghciから.ghciファイルあたりの標準的な構成に加えて、あなたいくつかのディレクトリに特殊な.ghciファイルを置くことができます)。また、Haskellソースファイルをコマンドライン引数のghc -e "expression" path/to/Source.hsとして渡すこともできます。 expressionは、module Sourceのコンテキストで評価されます。

+0

cool ...あなたの現在のディレクトリに特殊な.ghciファイルを持つオプションについて知らなかった。 – oliver