Python からいくつかの Haskell ライブラリ (Darcs、Pandoc など) を使用したいのですが、Python には Haskell への直接の外部関数インターフェイスがないようです。それを行う方法はありますか?
6 に答える
Python コードで C を呼び出すことができれば、FFI経由でエクスポートされた Haskell 関数を呼び出すことができます。
もう 1 つのアプローチは、標準の IPC インターフェイスを作成することです。darcs と pandoc の場合は、単にそれらをバニラの実行可能ファイルとして呼び出し、その出力を解析するのがよいでしょう。
Haskell 側での退屈で反復的な FFI およびマーシャリング コードの生成の自動化に関しては、c2hsをお勧めします。これにより、既存の C インターフェイスに基づいて多くの自動生成が可能になります。おそらくpythonにも似たようなものがあります。
悲しいかな、SWIG は、私の知る限り、Haskell 用に実装されたことはありません。
1 つの追加のアイデア: 直接 C バインディングよりも効率的ではありませんが、Haskell にシェルアウトするよりも効率的なものは、Apache Thrift などの rpc システムです: http://incubator.apache.org/thrift/
thrift は使いやすく、サポートも充実しており、適度なパフォーマンスもあると思います。Haskell サーバーを実行すると、ローカル通信のコストはかなり安くなりますが、c 型を直接使用するよりもマーシャリング/アンマーシャリングに多少多くの費用がかかります。
Haskell から Python を呼び出すための少なくとも 2 つのパッケージ、missingpy ( http://hackage.haskell.org/package/MissingPy ) と cpython ( http://hackage.haskell.org/package/cpython ) もあります。後者は、他の方向でのサポートが計画されていると主張していますが、これがまだ当てはまるかどうか、またそうである場合はいつになるかを作者に尋ねる必要があります。
ノブはこちら。
しかし、Haskell の FFI を使用して、Python からユーザー定義の Haskell 関数を呼び出すことができました。基本的に、Haskell 関数を dll にコンパイルし、Python で ctypes を使用して dll をインポートしました。そのため、この関数は Python で使用できるようになりました。
ここに手順を書きました: https://justa0xc0de.wordpress.com/2015/01/08/using_haskell_function_in_python/
お役に立てれば。
pandocの場合、少なくとも、次のCバインディングを使用できます: https ://github.com/toyvo/libpandoc