함수 프로그래밍에서는 '단일 함수 인터페이스'를 함수 자체로 바꾸는 것이 일반적입니다. 나는. 당신이 제공된 유형의 여러 가지 방법을해야하는 경우
#r @"packages\FSharp.Data\lib\net40\FSharp.Data.dll"
open FSharp.Data
type Provider1 = JsonProvider<""" { "name":"John" } """>
type Provider2 = JsonProvider<""" { "name":"John", "age":94 } """>
let parse parseFn json =
parseFn json
let p1 = parse Provider1.Parse """{ "name": "Not John" }"""
let p2 = parse Provider2.Parse """{ "name": "Not John either", "age": 12 }"""
, 당신은 사용할 수 있습니다 예를 들면 : 대신 Parse
방법을 갖는 파서에 전달하는 단지 최고 수준의 값으로 Parse
기능을 사용 필요한 모든 데이터를 포함하는 기록 :
type Parser<'b> = {
Parse : string -> 'b
GetSample : unit -> 'b
}
let parseUsing parser text =
printfn "Parsing things like %A" <| parser.GetSample()
parser.Parse text
let parser1 = { Parse = Provider1.Parse; GetSample = Provider1.GetSample }
let parser2 = { Parse = Provider2.Parse; GetSample = Provider2.GetSample }
let p1' = parseUsing parser1 """{ "name": "Not John" }"""
let p2' = parseUsing parser2 """{ "name": "Not John either", "age": 12 }"""
SRTPs 강력한 (멋진) 동안, 그들의 사용은 제한되어야한다. 과용은 컴파일러의 속도를 늦추고 코드를 이해하기 어렵게 만듭니다.