2014-04-17 2 views
5

생성자를 함수로 전달할 방법이 있습니까?생성자 함수의 축약어

type foo = 
    | Foo of int 
    | Bar of int 

let foo x = Foo x 
let bar = fun x -> Bar x 

기능 foobar에 대한 속기이 있습니까? 함수로 생성자를 전달하려고하지만 fun x -> Bar x을 작성하는 것은 다루기 힘들어 보입니다.

답변

5

camlspotter의 대답은 충분히 가까이,하지만 귀하의 경우에는 Variantslib를 사용하고 유형 정의의 끝에서 with variants를 추가 할 :

type foo = Foo of int | Bar of int 
val bar : int -> foo = <fun> 
val foo : int -> foo = <fun>              
module Variants : 
    sig 
    val bar : (int -> foo) Variantslib.Variant.t 
    val foo : (int -> foo) Variantslib.Variant.t 
    end 
+1

답해 주셔서 감사합니다. 구문 분석 기능을 언어에 추가하는 것이 상대적으로 간단하다는 점에 감명을 받았지만 제 3 자 라이브러리를 다운로드해야한다는 점에 실망했습니다. –

1

Fieldslib : https://github.com/janestreet/fieldslib을 사용하십시오.

type foo = | Foo of int | Bar of int with fields 

및 Fieldslib의 구문 확장자로 컴파일 :

같은 유형 정의에 with fields 접미사를 추가. 자동으로 foobar을 자동으로 생성합니다.

+0

Fieldslib은 다음과 같습니다

type foo = Foo of int | Bar of int with variants;; 

다음 당신에게 제공 레코드의 경우 sum 유형이 아니라 그것은'type foo = {foo : int; bar : int} with fields'하지만 실제 예제에서는 그렇지 않습니다. – Virgile

+0

오, 죄송합니다. 그렇다면 Fieldslib와 비슷한 P4 확장이 필요하지만 변형이 필요합니다. – camlspotter