모듈을 정의한 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
유형에 액세스하는 방법 또는 설명이 불가능한 이유는 무엇입니까?
'Stock'유형은 제공된 유형입니다. F # 유형 제공자가 제공합니다. 형식 공급자는 F # 컴파일러에서 실행되며 형식을 구성하여 컴파일러로 다시 넘깁니다. 따라서 F # 컴파일러를 실행하지 않으면 (C#을 사용하기 때문에), 타입 제공자가 실행되지 않아서'Stock' 타입을 사용할 수없는 것처럼 보입니다. OTOH, DLL에 'Stock'유형이 포함되어있어 설명이 잘못되었을 수 있습니다. 그러나 최선의 추측은 "유형 제공자는 특별하다"라는 대답이 내려진다는 것입니다. – rmunn
[C#에서 사용할 수있는 F # 유형 공급자를 어떻게 만들 수 있습니까?] (http://stackoverflow.com/questions/12118866/how-do-i-create-an-f-type-provider- c에서 사용 가능) –
@rmunn 귀하의 의견은 저에게 의미가 있습니다. 나는 타입 제공자와 문제가 있어야한다는 것에 동의한다. 그 대답을하면 기꺼이 받아 들일 것입니다. – PiotrWolkowski