2016-05-31 6 views
0

私はJavascriptの背景から来ています& Reason/Ocamlのモジュールシステムでどのようにプログラムを構築/構築する必要があるかを理解しようとしています。練習としてOCaml /理由設計モジュール

はのは、どのように私はこれを達成するために私のプログラムを設計する必要があり

var TeaType = new GraphQLObjectType({ 
    name: 'Tea', 
    fields:() => ({ 
     name: {type: GraphQLString}, 
     steepingTime: {type: GraphQLInt}, 
    }), 
}); 

(js_of_ocamlを通じてバックJSにそれをコンパイルします)私はOCamlで/理由にはJavaScriptのこの作品を書きたいとしましょうか?

jsからjs_of_ocamlまでのGraphQLObjectTypeを生成するモジュールをもう1つ作成する必要がありますか?

このタイプのGraphQLObjectTypeをどのように構造化しますか?私はフィールドを意味

Tea.re 
let name = "Tea"; 
let fields = /* what type should I make for this? Tea is 
      just one of the many graphql-types I'll probably make */ 

はフィールドの未知の量が含まれているマップを返しサンクです。 (すべてのgraphqlobjectは異なるフィールドを持っています) OCaml/Reasonのこのマップはどのようなタイプになっていますか?

+1

独自のモジュール内の各レコードを定義するのに便利ですJamascriptのOCamlへの慣用句、OCamlはさまざまな熟語を使用しています。この場合、正しく理解すれば、ラベル付き引数とオプション引数を持つ1つの関数がそのトリックを行うはずです。 – Drup

+0

OCamlで考えることについてもっと知ることができるリソースがありますか?書籍ですか? – Seneca

+1

http://ocaml.org/learn/ https://realworldocaml.org/ – Drup

答えて

0

ちょうどあなたがOCamlでの風味を感じるためには、直接(構文)翻訳は次のようになります。

let tea_type = GraphQL.Object.{ 
     name = "Tea"; 
     fields = fun() -> QraphQL.Field.[{ 
      name = GraphQL.Type.{name : GraphQL.string } 
      steeping_time = GraphQL.Type.{name : QraphQL.int } 
     }] 
    } 

基本的に、私はOCamlでの記録にjsのオブジェクトをマッピングされました。 OCamlにはメソッドと継承を持つオブジェクトもありますが、レコードは引き続きより抽象的なものです。レコードは名前付きタプルとして見ることができ、もちろん関数を含めることができます。モジュールは、より重い重量の抽象であり、それはまた、フィールドの集合でもあります。レコードとは異なり、モジュールには型、その他のモジュール、基本的に他の構文構造が含まれています。型はコンパイル時に削除されるため、モジュールのランタイム表現はレコードの表現とまったく同じです。モジュールは名前空間も定義します。 OCamlのレコードは、そのフィールドの名前によって定義されているので、あなたがしている概念を転送しようとしているので、それはあなたに答えるために少し繊細です、例えば、常に

module GraphQL = struct 
    let int = "int" 
    let string = "string" 

    module Type = struct 
    type t = { 
     name : string 
    } 
    end 

    module Field = struct 
    type t = { 
     name : string; 
     steeping_time : Type.t 
    } 
    end 

    module Object = struct 
    type t = { 
     name : string; 
     fields : unit -> Field.t list 
    end 
end 
+0

ありがとう!私はOCamlで思考を始める前に、私は長い道のりがあると思います... – Seneca

関連する問題