2016-06-22 7 views
5

私はしばらくの間ハスケルを学んでいるので、実際にどのように見え、おそらくプロセスをリバースエンジニアリングしているかを知るためにいくつかの一般的なプロジェクトを調べることに決めました。ハスケルで関数のソースを見つける(ワークフロー)

私はハキルをよく知っているし、適度に複雑なので、私はハキルを選んだ。そして、私はすぐに、輸入品を逆追跡する方法という疑問に固執しましたか?

JavaScriptでは、すべてのインポートが明示的です。一度にすべてを台無しにし、人々

import Q 

let Q = require("Q")   // namespace 
let {foo} = require("Q/foo") // value 

Haskellのデフォルト値は、実際にそれを乱用しているようです。

私はtutorialを見て、ソースで、どこか別の機能がどこにあるのかわかりません。

ソースファイルなどを表示する構文エラーを作成するようなこの種の情報を発見するためのトリックはありますか?あなたのワークフローでこのようなタスクをどのように解決しますか?コンパイルコードを必要としない

+0

関数名やシグネチャを検索することもできます。https://www.haskell.org/hoogle/ – erdeszt

+0

インポートする内容を明示的に指定するには、 'import Q(foo)'を実行します。また、[hoogle](https://www.haskell.org/hoogle/)または[hayoo](http://hayoo.fh-wedel.de/)を使用して、haskell関数を検索してください。 – Bakuriu

+1

@Bakuriu - コードが与えられ、あらかじめ定義されている場合、リバースエンジニアリングのための仕様は役に立たない。 –

答えて

6

いくつかのオプション:そのデータベースはStackageの全てがロードされているので

私はStackageのhoogleをお勧めします。

あなたは、コードを作業している場合:

  • は、最後の2つのオプションの例としてGHCiの中
  • エディタやコマンドラインからGHC-modを使用

:iコマンドを使用し、あなたのようなモジュールFoo.hsがあるとします:

module Foo where 
import Data.Maybe 
... 

ghciの使用:

$ ghci Foo.hs 
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help 
[1 of 1] Compiling Foo    (Foo.hs, interpreted) 
Ok, modules loaded: Foo. 
*Foo> :i catMaybes 
catMaybes :: [Maybe a] -> [a] -- Defined in ‘Data.Maybe’ 
*Foo> 

ghc-modを使用して:あなたはIntero for Emacsを使用している場合

$ ghc-mod info Foo.hs catMaybes 
catMaybes :: [Maybe a] -> [a] -- Defined in ‘Data.Maybe’ 
$ 
+0

私はあなたが「GHC.Foo.Bar」で定義されていることを意味すると思います。 'ghc-mod'に関しては、あなたはStackを同等に提供できますか?私はあなたの答えは出力例で包括的であると思います。 –

+0

回答が更新されました。 'stack'の場合、ghciに入るために' stack ghci'を使います。 – ErikR

+0

まだHaskellプラットフォームなしで 'ghc-mod'コマンドを実行する方法は不明です:( –

4

、それはM-.の標準 "の定義に行く" のショートカットをサポートしています。

他のInteroフロントエンドはおそらく、この機能にもエディタの標準UIを使用しています。私は既にNeoVim frontendがあることを知っています。

+0

ありがとうございますIDEが可能なオプションのひとつです" Haskell for Mac "プロジェクトでこの機能が利用できることを知っている人はいますか? –

0

この種のハスケルコードブ​​ラウジングサポートをvimにしたい場合は、Stephen Diehlの素敵なチュートリアルVim and Haskell in 2016を試してみてください。

Haskellには、GHCコンパイラにコードに関する情報を問い合わせるためのさまざまな編集環境があります。たとえば、vim-hdevtoolsを使用し、ファイルhakyll/src/Hakyll/Main.hsvimに開き、カーソルをCommands.buildシンボルに移動し、コマンド:HdevtoolsInfoと入力すると、GHCはシンボルのタイプと定義されている場所を教えてくれます私は定義にジャンプするオプション。

Commands.build :: 
    Config.Configuration -> Logger.Logger -> Rules a -> IO ExitCode 
     -- Defined at hackyll/src/Hakyll/Commands.hs:48:1 

しかし、私は多くの時間を費やしたと告白します。getting vim-hdevtools to work

関連する問題