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

F#

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

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

F#

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

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

F#

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

プログラミング言語の構文って大事だよね、という話

Twitterでこんなつぶやきをしました。 プログラミング言語としてのSQL(select)とか、プログラミング言語としてのXSLTとかやると、構文大事って実感持ててオススメ。オススメはしない。— ぐるぐる系SQL (@bleis) 2021年4月24日 が、ちょっと違う感じに受け取…

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 を使うこと…

退職のお知らせ

etc

今年いっぱいで株式会社オンザロード(以下OTR)を退職することになりました。 有給消化は9月からずっと半休という形で取るという形だったのはちょっと珍しいかもしれません。 OTRに入ったのは2010年1月1日ですから、11年勤めたことになります。 企業のIT化を…

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

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 で取り出しておいて、それを元…

Optionalは引数に使うべきでない、という幻想について

継続渡しすると戻り値は引数になるから「Optional は戻り値にのみ使うべき」というルールは無意味だよ、という話。 あ、そういう話ね、と分かった方はこれ以上読む必要はありません。 Mono が Async + Optional + 例外という欲張りパック状態なのも問題です…

Terraformの文法について?

最近Terraformを勉強してたんですが、日本語でTerraformの文法について説明しているものが見当たらなかったのではまった(?)ところまで書いてみました。 Terraformの文法? 正確にはHCL(HashiCorp Configuration Language)の文法です。 Terraformというツール…

WSLへのOchaCamlのインストール方法

基本的にはOchaCamlの公式ページに従えばいいんですが、環境をWSL(Ubuntu)に固定し、日本語でまとめておきます。 準備 makeとgccが入っていない場合はインストールしておきます。 sudo apt install make gcc インストール方法 ホームディレクトリで作業しま…

第1回継続勉強会を開催しました

最近自分の中で継続熱が高まっているので、継続の話をできる場所が欲しくなりました。 とはいっても、そもそも継続の知識を持っている人が少ないので、そこを広めるところから始めることにしました。 社内でも継続を理解したいという人がおり、その人たちも…

多値について本気で考えてみた

先日のエントリの反応として、多値の批判をしているように受け取られた方がいました。 実際には、多値の批判をしているのではなく、Go言語の「多値とそう見えるけど違うものがある」という仕様を批判したものでした。 また、タプルにこだわっているという受…

Go言語のイケてない部分

Go

最近色々あって仕事でGo言語を使っています。 色々割り切っている言語なので、こんなこと言ってもしゃーないんですが、言語設計はミスってるんじゃなかなぁ、と思わざるを得ない点が多々あります。 使い始めて1か月くらいなので間違ったことを書いているかも…

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

F#

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

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

C#

この記事はC# Advent Calendar 2016の12日目のものです。 昨日(今日)書いた、F# Advent Calendar 2016 11目のC#版です。 今日のリポジトリはこちら。 github.com 実は、F#版だけじゃなくてC#版の実装もあります。 ということで、そのざっくりした紹介です。 …

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の参加者の皆さん、今年は登録順ではなく、申請順になってしまっているようなので、イベントページに登録はし…

re:僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。

元ネタ: 僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 - 亀岡的プログラマ日記 OOPの文脈で見ると、元の記事が言っていることもわからなくはないのですが、対象が広すぎていろいろと不正確になってしまっているので、ちょっと…

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

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

引っ越した

etc

バイバイ名古屋 pic.twitter.com/QJkDERqHhV— ふ''れいす (@bleis) 2015, 9月 27 ということで、引っ越しました。 新住所は愛知のどっかです。 引っ越してほしくなったものです。 届いたら喜びます。