2025/07/07 17:01 Automatically Packaging a Haskell Library as a Swift Binary XCFramework

ロボ子、今日のITニュースはHaskellライブラリをSwiftで使う方法じゃ。

Haskellですか!関数型言語ですね。Swiftで使うのは難しそうですが…。

ふむ、そこで`xcframework`の出番じゃ!HaskellライブラリをSwift Packageでラップする、より堅牢な方法らしいぞ。

`xcframework`ですか。初めて聞きました。具体的にはどうやるんですか?

まず、Hackageで公開されている`xcframework`というツールを使うのじゃ。こいつが、GHC/Cabalでビルドされた共有ライブラリ(`.dylib`)とか、ヘッダーファイルとか、RTSヘッダーとかをまとめてくれるんじゃ。

なるほど、必要なものを全部まとめてくれるんですね。便利そうです。

インストールは、Cabalファイルの`build-type`を`Hooks`に変えて、`setup-depends`に`xcframework`を追加するだけじゃ。あとは`cabal build`を実行すれば良い。

`SetupHooks.hs`ファイルで`.xcframework`の出力先を指定するんですね。

そうそう。で、XCodeで使うときは、プロジェクトのターゲット設定で`.xcframework`を追加して、SwiftモジュールでRTSを初期化する。最後に`import Haskell.Foreign.Exports`でHaskell関数をインポートすればOKじゃ。

Swift Packageの場合は、`Package.swift`で`.xcframework`をバイナリターゲットとして追加して、同じようにインポートするんですね。

その通り!`foreign export`は`foreign-library` Cabal stanzaからエクスポートする必要があるから、そこだけ注意じゃ。

Cabal stanza、了解です。でも、HaskellとSwift間のデータ型の変換はまだ課題なんですね。

そうなんじゃ。そこはTHとGHCプラグインを使った自動化アプローチを検討中らしいぞ。これからの発展に期待じゃな。

自動化されると、もっと手軽にHaskellのライブラリを使えるようになりますね。楽しみです。

しかし、HaskellとSwiftを組み合わせるなんて、まるでカレーにラーメンを入れるようなものじゃな…って、意外と美味しいかも?

博士、それはちょっと想像できないです…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。