eq($T1, $T2) conv(Int, $T1) eq($T1, Int?) conv(Int?, $T2) eq(Int?, $T2) conv(Int, Int?) eq($T1, Int?) conv(Int?, Int?) eq(Int?, $T2) conv(Int, Int?) !ࠓ5Λ*OU ʹͯ͠Έ·͢ɻ !͜ͷಉҰ੍͔Β୯ҰԽ͕Ͱ͖·͢ɻ !5ͷಉҰ੍͕ग़ͯ͘ΔͷͰɺ !࠶ͼ୯ҰԽ͠·͢ɻ !͢Δͱɺશͯͷ੍ཱ͕͠ɺܕ͕ղ͚·ͨ͠ɻ )BOEMJOH0WFSMPBET func foo() -> Bool func foo() -> Int func foo() -> String func main(i: Int) { let a: Int = foo() } call($T1, (), Int) eq($T1, () -> Bool) eq($T1, () -> Int) eq($T1, () -> String) QPTTJCJMFY ͜ͷΑ͏ͳํ๏ʹΑͬͯɺΦʔόʔϩʔυʹରԠ͢Δ͜ͱ͕Ͱ͖·͢ɻ !DBMM੍Λੜ͢Δͱ͖ʹɺ ͦͷݺͼग़͠ର͕Φʔόʔϩʔυ͞Ε͍ͯͨΒɺ ؔͷܕΛ͍ͬͨΜܕมʹ͓͖·͢ɻ !ͦͯ͠ɺΦʔόʔϩʔυ͞Ε͍ͯΔؔΛͦͷܕมͷ୯ҰԽީิͱ͢ΔͷͰ ͢ɻ