2014の20日目の記事です。「F#で2ch専用ブラウザをつくろう」では「2ちゃんねる」の掲示板データを読みこむためのライブラリをF#で記述しました。Phoneアプリの開発から使えるようにしてみます。PhoneアプリにはSilverlightアプリとユニバーサルアプリの2種類がありますが、ここではもちろんユニバーサルアプリを対象にしています。Libraryを作るF#のコードをユニバーサルアプリから使う基本的な流れは以下のようになります。Libraryを選びます。4.5ベースのPCLを生成します。プロジェクトを生成して、前回作成したコードをインポートしてみます。これで完了!と書きたいところなのですが、実はこのライブラリ、このままでは使えません。Runtimeではこのエンコーディングはサポートされていないため、Encoding.GetEncoding(“SJIS”)を呼び出した時点で例外が発生してしまうのです。7時代からの話なので、実は改めて驚くことはないのですが、PCLでコンパイルが通ったからといって実行できるとは限らない典型例といえます。実装例があるので、そちらを参考にすることにしましょう。Runtimeコンポーネント(SjisEncoding)を定義します。result;}次にこれをEncodingクラスとして利用できるようにSjisEncodingクラスを定義します。さんの実装をごらんください。さんの実装をごらんください。}さて、記事にしたがってエンコーディングのクラスを書いてみたのですが、これをF#のコードから使うのにはもうひと工夫必要だったりします。いうのも、F#のPCLから参照できるのはPCLのライブラリのみなのですが、このSjisEncodingをPCLのライブラリとしてコンパイルすることはできません。いうのもWin32のAPIを呼び出す部分がWinRTコンポーネントになっており、これをPCLから参照することはできないからです。そこでMonalith.Communicationモジュールから直接このクラスを参照するのではなく、外部からEncodingのインスタンスを受け取るようにして、Monalith.Communicationからユニバーサルアプリプロジェクトへの参照をなくします。Parser.parseRootMenuモジュールとして定義していたHttpClientをクラスとして定義しなおし、Encodingをコンストラクタの引数として受け取るように変更しています。Phoneアプリの開発にも使えるPCLとして形なりました。さんです.謝辞:快く参照を許可してくれた@kazuakixさん、ありがとうございました。