このコードはコンパイルされません:
let f = fun x y -> x <<< y // bit shift
let g = fun x y -> x <<< y
[<EntryPoint>]
let main _ =
printfn "%d" <| f 1 10
printfn "%d" <| f 1L 10 // error
printfn "%d" <| g 1L 10
0
(7,21): error FS0001: This expression was expected to have type
int
but here has type
int64
ユニファイヤは、関連付けられている型パラメータを修正し、最初の出現を確認したf
と思います。g
このプロセスを支配するものは何ですか? これは「値の制限」に非常に似ていると思いますがf
、g
すでに eta 拡張されています! これは難しい問題です。
事前定義された演算子を整数型に対してアドホックなポリモーフィズムで入力することの背後には、何らかの黒魔術があることは確かに想像できますが、それは単なる私の推測です。任意の情報をいただければ幸いです。