プログラミング in OCaml メモ
8.2.4 多相性と書き換え可能データ
ここのところの記述と実際がちょっと違っていたので、メモしておく。
「まずは空リストへの参照を定義します。」とあって、以下のコードが示されている。
# let x = ref [];;
val x : 'a list ref = {contents = []}
「参照x に格納されているのは空リストですので、さまざまな型とのコンスができます。」
とあって、
# (2 :: !x, true :: !x);;
- : int list * bool list = ([2], [true])
という実行例が提示されているが、実際は、以下のようなエラーが出る。
(OCaml 4.05.0)
Error: This expression has type int list but an expression was expected of type bool list
Type int is not compatible with type bool
これは、「2 :: !x」 が int list なのに、「true :: !x」 が bool list だと言っているのだろう。
したがって、以下のようにするしかないかな。
let x = ref [];;
val x : '_a list ref = {contents = []}
let y = ref [];;
val y : '_a list ref = {contents = []}
(2 :: !x ,true :: !y);;
- : int list * bool list = ([2],[true])