2013-05-14 4 views
1

F # 유형 정보

let s = 
    function 
    | [] -> [[]] 
    | list -> []::list 

입력이이 간단한 기능 ('목록 목록 ->'목록 목록). 따라서 'a는 generic이므로, 임의의 depth를 인자로 받아 들인다. 내 문제는 필자가 항상 입력 목록 또는 F # 대화 형 작업의 깊이를 지정해야한다는 것입니다. 예 :

s [] 

이 작동하지 않습니다

s ([]: int List List) 

의지하면서. 마찬가지로,

s [[[]]] 

이 작동하지 않습니다하지만

s ([[[]]]:int List List List) 

는 않습니다. 이것은 단지 예일뿐입니다. 일반적으로 이러한 명시적인 타이핑을 피할 수있는 방법이 있습니까?

감사합니다.

+1

가능한 중복 [F # 목록 목록 가져 오기 및 모든 하위 목록 반전] (http://stackoverflow.com/questions/16705131/f-take-a-list-of-lists-and-reverse- all-the-sub-lists) –

답변

0

감사합니다. 유형은 무엇입니까

s [[[]]] 

't list list입니다. 일부 .NET 기본 제한 사항으로 인해 그러한 값은 존재할 수 없습니다. 't 콘크리트를 만들어야합니다.

F # 값 제한에 대한 훌륭한 자습서가 많이 있습니다. 가장 좋은 해결책은 나중에 동일한 파일에서 결과를 사용하거나 구체적인 유형을 제공하기 위해 작동하도록 추론을위한 다른 방법을 제공하는 것입니다.

+1

.NET 제한 사항과는 아무런 관련이 없습니다. 근본적인 가치와 변이를 모두 지원하는 것은 근본적으로 안전하지 않습니다. – kvb