Programming
F#과 Haskell의 type inference 비교
steloflute
2023. 9. 21. 23:17
F#의 type inference는 Haskell을 쓸 때보다 주의할 점이 있다.
예제로, 수 목록을 구간 목록으로 변환하는 프로그램을 작성해보았다.
F#에서는 이렇게 리스트에 대해 .[0]을 사용하면 타입 선언 없이는 컴파일되지 않는다:
let addToIntervals (intervals: (int * int) list) (n: int) =
if not intervals.IsEmpty && n = (fst intervals.[0]) - 1
then (n, (snd intervals.[0])) :: (List.tail intervals)
else (n, n) :: intervals
let toIntervals (nums: int list) =
List.fold addToIntervals [] (List.sortDescending nums)
// test
let numbers = [1;2;3;5;6;8]
printfn "%A" (toIntervals numbers)
List.head를 .[0] 대신 사용하면 잘 된다. (.[0]은 앞의 대상이 List인 줄을 몰라서 그런 것 같다.)
Haskell에서는 이렇게 타입 선언 없이 잘 된다: