2016-10-01 2 views
2

모듈을 정의한 F # 라이브러리가 있습니다. 모듈 내부에는 2 가지 유형이 정의되어 있습니다. C# 프로젝트에서 라이브러리에 액세스하고 있습니다 (현재는 문제가되지 않지만 테스트 프로젝트 일뿐입니다).F # 모듈에는 두 가지 유형이 있지만 C#에는 한 가지 유형 만 표시됩니다.

C#에서 유형 중 하나에 액세스 할 수 있지만 다른 하나는 사용할 수 없습니다. 내 F # 코드 아래

:

module Stock 

open FSharp.Data 
open InstrumentQueryBuilder 

type Stock = CsvProvider<"..\prototype_historical_data.csv"> 

type StockData(symbol) = 
    member this.Symbol = symbol 
    member private this.QueryBuilder = new InstrumentQueryBuilder(this.Symbol) 
    member this.LoadData() = 
     this.QueryBuilder.HistoricalData() |> Stock.Load 
    // more member definitions here... 

의 C#에서 나는 StockData하지만 Stock을 볼 수 있습니다. Stock은 FSharp.Data의 CsvProvider입니다. 내 C# 코드에서 FSharp.Data 및 FSharp.Core를 참조하고 있습니다.

var stockData = new Stock.StockData("SPY"); 

하지만 Stock 위해 동일을 할 경우 컴파일 시간 오류가 표시됩니다 : C#으로 StockData를 사용

이만큼 간단합니다. 어떤 제안을 Stock 유형에 액세스하는 방법 또는 설명이 불가능한 이유는 무엇입니까?

+1

'Stock'유형은 제공된 유형입니다. F # 유형 제공자가 제공합니다. 형식 공급자는 F # 컴파일러에서 실행되며 형식을 구성하여 컴파일러로 다시 넘깁니다. 따라서 F # 컴파일러를 실행하지 않으면 (C#을 사용하기 때문에), 타입 제공자가 실행되지 않아서'Stock' 타입을 사용할 수없는 것처럼 보입니다. OTOH, DLL에 'Stock'유형이 포함되어있어 설명이 잘못되었을 수 있습니다. 그러나 최선의 추측은 "유형 제공자는 특별하다"라는 대답이 내려진다는 것입니다. – rmunn

+2

[C#에서 사용할 수있는 F # 유형 공급자를 어떻게 만들 수 있습니까?] (http://stackoverflow.com/questions/12118866/how-do-i-create-an-f-type-provider- c에서 사용 가능) –

+0

@rmunn 귀하의 의견은 저에게 의미가 있습니다. 나는 타입 제공자와 문제가 있어야한다는 것에 동의한다. 그 대답을하면 기꺼이 받아 들일 것입니다. – PiotrWolkowski

답변

1

F #의 경우 type은 모두 매우 비슷해 보이지만 많은 의미가 있습니다.

귀하의 경우,

스톡 유형 약어 (별칭). 아니요 첫 번째 클래스 개체입니다. 그게 왜 C#에서 보이지 않는지.

StockData - 클래스입니다. 생성자로 사용할 이름 뒤에 함수 스타일 매개 변수 목록이 있습니다.