F# 4.0で入った地味だけど嬉しい機能紹介 #FsAdvent

この記事はF# Advent Calendar 2015の26日目の記事です。

通常のアドベントカレンダーは25日までですが、F# 界隈では英語版が31日まで続けているのにあわせて31日くらいまでやるっぽいです。

4.0の変更一覧

下記のページを見るのがてっとり早いです。

F# 4.0 Status · Microsoft/visualfsharp Wiki · GitHub

重めの機能でデザインとか背景とかを知りたい場合は以下。

fsharp/FSharpLangDesign · GitHub

こっちはvNextの草案も含めるみたいですね。

地味だけどうれしい機能紹介

F# 4.0はF# 3.0の時と比べると地味に見える変更が多い印象ですが、着実に改善されています。 というわけで、今回は私が地味にうれしいと思った機能を簡単に紹介していきます。

nthが非推奨になりitemが追加

ListやSeqモジュールにはnth関数がありましたが非推奨になり、代わりにitem関数が追加されました。

nthにはListとSeqで引数の順序が異なる(Listのほうがパイプライン演算子に優しくない引数順序だった)という問題がありましたが、無事統一できるようになった形です。

F# 4.0でnthを使うと警告がでます。 VS 2015を使っているとnthはインテリセンスで一覧に現れないので注意しましょう。

units of measureが型変換なしでprintfできるようになった

このページの例を見ればどういう挙動なのか一目でわかります。

クラスのオブジェクト生成を関数のように扱える

xs |> List.map Uri

こういうコードが書けるようになりました。

StructuredFormatDisplayAttributeで複数のプロパティを利用できる

以下のように書けるようになりました。

[<StructuredFormatDisplay("My name is {First} {Last}")>]
type Person = {
  First: string
  Last: string
}

今までであれば、別のプロパティをわざわざ(型よってはこれだけのために)追加しなければならなかったので、楽になりますね。

isNull関数の追加

.NETライブラリをラップするときになんだかんだお世話になりそうです。 あとstringでもお世話になってます。

終わりに

ところで、色々なライブラリはいつのタイミングで4.0に移行するのでしょうかね…?