2016-10-26 1 views
5

유형 공급자를 통해 일반 유형 작성

[<TypeProvider>] 
type SampleTypeProvider(config: TypeProviderConfig) as this = 

... 
//the below would be the generated type 
type A<'b>() = 
    member this.C() : 'b = ... 
    member this.D() : 'b = ... 
// 
... 
[<assembly:TypeProviderAssembly>] 
do() 
    .... 

그래서 그 사용 시나리오에

#r @".\bin\Debug\SampleTypeProvider.dll" 
type A = SampleTypeProvider.A 
type intA = A<int> 
type strA = A<str> 

에 보일 것이다 있도록 가능한 유형의 업체를 통해 제네릭 형식을 만드는 것입니다 그리고 그 경우 가능 - 어떻게 접근 할 수 있습니까?

답변

4

표준 방법을 사용할 수 없습니다. 나는 주변을 둘러 보았지만 정식 참조를 찾을 수는 없었지만 알려진 제한 사항이며 제한을 해제하기위한 다양한 제안이있었습니다.

Ross McKinlay는 형식 제공자가 실행될 때 F # 소스 코드로 파일을 생성하여이 문제를 해결하는 약간의 극단적 인 프로젝트 인 Mixin type provider을 가지고 있습니다. 그런 다음이 파일을 프로젝트에 포함 할 수 있습니다. 이것은 아마도 유형 공급자보다 코드 생성이 더 많지만 그의 talk about the topic은 일부 제한 사항에 대한 좋은 설명이기도합니다.

이 문제를 해결하는 방법은 형식 공급자의 용도에 따라 다릅니다. 제한된 수의 유형 만 필요하면 정적 매개 변수와 같은 것을 사용하고 A<"int"> 또는 A<"string">을 쓸 수 있습니다. 일반 제공되지 않는 제네릭 유형을 제네릭이 아닌 유형과 함께 사용할 수도 있습니다 (영리한 방법으로). 하지만 더 나은 답변을 얻으려면 구체적인 유스 케이스에 대해 더 많이 작성해야한다고 생각합니다.

+0

한숨. 나는 네가 준 한 가지 다른 대답을 기대했다. – robkuz