F#

サンプルから学ぶTypeProviderの作りかた

F#

先日の第5回Fun Fan Fsharpで型プロバイダー(TypeProvider)の話がありました。 最近は全然TypeProviderを触っていなかったのですが、久しぶりに触ってみるかー、と思って色々触ってみました。 発表資料でもあったように、イマドキは dotnet コマンドでテンプ…

コンピュテーション式でキーワード引数 その2

F#

コンピュテーション式でキーワード引数を改良しました。 前回の記事では、以下のような欠点がありました。 実行効率が悪い エラーメッセージが分かりにくい 今回はこの2つの欠点を解決してみましょう。 実行効率をよくする ビルダーのメソッドに inline 指定…

コンピュテーション式でキーワード引数

F#

これはF# Advent Calendar 2021の23日分の記事です。 この間の第3回 FUN FAN F#に参加したところ、カスタムオペレーターをキーワード引数のように使っていたのをみて思いついたネタを紹介します。 あくまでネタですので、実際にこのようなAPIを提供するのか…

F#のパーサーに対する改良が入るかも?

F#

F# Advent Calendar 2020の14日目のエントリーです。 そろそろネタ切れですが、今後入るかもしれない改良の紹介です。 RFC FS-1083 すごい地味なRFCですが、今年のF# Advent CalendarでもあったSRTP(Statically Resolved Type Parameters: 静的に解決される…

nameofの罠

F#

F# Advent Calendar 2020の11日目のエントリーです。 5日目に続いてまた nameof の話です。 nameof にはF#のプログラムとしては当然だけど忘れがちな制約があります。 何の問題もないように見えますが、これはコンパイルエラーです。 let f () = nameof f こ…

ネストしたレコードの更新が楽になるかも?

F#

F# Advent Calendar 2020の9日目のエントリーです。 今日は(も?)、入ると嬉しいRFCの話です。 RFC FS-1049 RFC FS-1049は、 ネストしたレコードのフィールドを with で書き換えられるように拡張しよう、というものです*1。 F#のレコードは with を使うこと…

コンピュテーション式の壊れた部分がなおりそう

F#

F# Advent Calendar 2020の6日目のエントリーです。 今日は将来のF#の話です。 RFC FS-1087 RFC FS-1087は3つのFeatureをまとめたRFCとなっています。 Tasks Resumable state machines Respecting Zero methods in computation expressions ひとつめはコンピ…

nameofについて

F#

F# Advent Calendar 2020の5日目のエントリーです。 F#5.0で導入された nameof は便利なんですが、いくつか制限があります。 まず、 nameof はファーストクラス関数ではありません。 そのため、 let f = nameof はできない x |> nameof はできない のような…

F# 5.0の新機能 その2

F#

F# Advent Calendar 2020の1日目の記事であるF# 5.0の新機能で大体書かれているのですが、2つ抜けているものがあるので紹介します。 nameofパターン RFC FS-1085 nameof の値でパターンマッチできます。 RFCにはタグを nameof で取り出しておいて、それを元…

FParsecでJSONパーサーを書いてみる話

F#

F# Advent Calendar 2017の4日目の記事です。 NGK2017B昼の部でパーサーコンビネーターについてLTしてきたので、その内容について書きます。 ただし、内容は大幅に加筆修正しています。 PCさえあればいい。 from bleis tift 導入 世の中にはパースすべきもの…

F#に型クラスを入れる実装の話

F#

この記事はF# Advent Calendar 2016の11日目のものです。ちょっと遅れてしまいました。。。 ICFP 2016(と併催されたML workshop?)で気になる内容があったので、ちょっとまとめてみました。 Classes for the Masses - ICFP 2016 ざっくり、F#に型クラスを導入…

続・そろそろPower Assertについてひとこと言っておくか

3年前にこんな記事をあげました。 bleis-tift.hatenablog.com 3行でまとめると、 Power Assertはユニットテストのためにほしかったものではない 欲しいのは結果の差分 誰か作って! というエントリでした。 そしたら id:pocketberserker が作ってくれました…

F#でWPFやるときのTipsとか(その2)

F#でWPFやるときのTipsとか(その1)の続編です。 添付プロパティの作り方 F#で添付プロパティを作るには、添付プロパティの本体はプロパティではなくフィールドに保持する必要があるようです。 // ダメな例 type Sample private () = static member SomeValue…

F#でWPFやるときのTipsとか(その1)

最近、Full F#でWPFしてるので、Tipsてきなものをまとめようと思います。 その2はTipsがたまればあるかもしれませんが、過度な期待はしないでください。 プロジェクトの作り方 基本的には、Pure F# WPF GUIアプリ開発に向けてに書いてある通りです。 細かい…

Optionに見るコンピュテーション式のつくり方

F#

またの名を入門コンピュテーション式(嘘 この記事は、「コンピュテーション式ってどうやって作ればいいの?」に対する自分なりの回答です。 matchのネスト optionを返す3つの関数f, g, hがあったとします。 で、このような処理がしたいとしましょう。 let ni…

Combine Deep Dives

F#

この記事はF# Advent Calendar 2015の17日目の記事です。 今日はコンピュテーション式の Combine について取り上げます。 詳説コンピュテーション式をある程度理解していると分かりやすいかもしれません。 内容を簡単にまとめると、 Delay の中で受け取った…

あなたの知らないF#についての7つの事柄

F#

この記事はF# Advent Calendar 2015の13日目の記事です。 タイトルは釣りで、今回はMicrosoft/visualfsharpリポジトリをウォッチしている中で見つけた個人的に面白かったIssueを取り上げます。 名前空間内でのprivateの意味 現状のF#では、名前空間内でpriva…

F#のクラス(の主に定義する部分)についてまとめ

F#

この記事はF# Advent Calendar 2015の5日目の記事です。 4日目は@n_enotの「F# でTDDした話 前編?」でした。 ※業務連絡。F# Advent Calendar 2015の参加者の皆さん、今年は登録順ではなく、申請順になってしまっているようなので、イベントページに登録はし…

ChalkTalk CLR – 動的コード生成技術(式木・IL等)に行ってきた

centerclr.doorkeeper.jp 直前で定員を増やしてもらえたので、参加できました。 会自体について 内容は主にILの話と式木の話で、ディスカッションというよりは講義に近い感じでした。 個人的にはディスカッション寄りの会を期待していたのですが、知識レベル…

シャドーイングとイミュータブルプログラミング

C# F#

シャドーイングのない言語と、イミュータブル中心のプログラミング(以下イミュータブルプログラミング)の相性って悪いのでは?と思ったのでブログに残しておきます。 シャドーイングとは 既存の変数と同名の変数を定義して、そのスコープで既存の変数にアク…

再帰関数のスタックオーバーフローを倒す話 その3

F#

連載目次 再帰関数のスタックオーバーフローを倒す話 その1 CPSとCPS変換の話 再帰関数のスタックオーバーフローを倒す話 その1.5 F#での「末尾」についての話 再帰関数のスタックオーバーフローを倒す話 その2 .NETにおける末尾最適化の方法についての話 再…

再帰関数のスタックオーバーフローを倒す話 その2.5

F#

連載目次 再帰関数のスタックオーバーフローを倒す話 その1 CPSとCPS変換の話 再帰関数のスタックオーバーフローを倒す話 その1.5 F#での「末尾」についての話 再帰関数のスタックオーバーフローを倒す話 その2 .NETにおける末尾最適化の方法についての話 再…

ProjectScaffoldを使ってみた

F#

最近公開したF#の式木の実行器であるFSharp.Quotations.Compilerですが、 これを作るためにProjectScaffoldを使ってみたのでその知見の共有です。 ProjectScaffoldとは ProjectScaffoldは、F#のプロジェクトを作る際の「足場」を用意してくれるツールです。 …

再帰関数のスタックオーバーフローを倒す話 その2

F# IL

連載目次 再帰関数のスタックオーバーフローを倒す話 その1 CPSとCPS変換の話 再帰関数のスタックオーバーフローを倒す話 その1.5 F#での「末尾」についての話 再帰関数のスタックオーバーフローを倒す話 その2 ← 今回 .NETにおける末尾最適化の方法について…

再帰関数のスタックオーバーフローを倒す話 その1.5

F# IL

連載目次 再帰関数のスタックオーバーフローを倒す話 その1 CPSとCPS変換の話 再帰関数のスタックオーバーフローを倒す話 その1.5 ← 今回 F#での「末尾」についての話 再帰関数のスタックオーバーフローを倒す話 その2 .NETにおける末尾最適化の方法について…

再帰関数のスタックオーバーフローを倒す話 その1

F#

再帰関数のスタックオーバーフローを倒す話を何回かに分けてします。 連載目次 再帰関数のスタックオーバーフローを倒す話 その1 ← 今回 CPSとCPS変換の話 再帰関数のスタックオーバーフローを倒す話 その1.5 F#での「末尾」についての話 再帰関数のスタック…

2つのOptionalで分岐する

僕のOptional<>の使い方がカッコワルイ。 - 谷本 心 in せろ部屋にある最後の例ですが、 2つのOptionalの組み合わせによって処理を分岐させるコードが幾つか載っています。 ifで書いた例を見てみましょう。 public String hello(Optional<String> name1, Optional<String> na</string></string>…

Effective Visual F# Power Tools

F#

さてさて、またもや他人のAdvent Calendarに乗っかったネタです。 今日は、Visual F# Power Tools の紹介というF# Advent Calendar 2014の11日目の記事です。 VFPTの基本的な便利な機能は元記事を参照いただくとして、このエントリでは更に進んだ使い方等を…

コンピュテーション式の変形後を覗き見るを改良する

F#

さてさて、気になるネタがまた増えたようです。 コンピュテーション式の変形後を覗き見るというエントリがF# Advent Calendar 2014の10日目の記事として公開されました。 Quoteを差し込んで、Runで表示する、というのは面白いアイディアですね。 だが俺の前…

クラスのコンストラクタ呼び出し時にプロパティも同時に初期化する

F#

これはF# Advent Calendar 2014の9日目の記事(ピンチヒッター)です。 昨日の記事はねのさんによるFSharperならこう書く(A Poker Game Program) #FsAdventでした。 この記事を勝手に添削したエントリも、よろしければ合わせてどうぞ。 何度も言いますが、コー…