2016-09-12 16 views
0

という名前のバリアント型を別のバリアント型に基づいています。しかし、応答のバリアント型を戻り値として使用することはできません。ここでは、コードは次のようになります。Ocaml:戻り値としてバリアント型を使用する方法

type ack_error = 
    | Not_list   
    | Arg    
    | Password   
    | Permission  
    | Unknown   
    | No_exist   
    | Playlist_max  
    | System   
    | Playlist_load 
    | Update_already 
    | Player_sync  
    | Exist   

type response = Ok | Error of ack_error * int * string * string 

(* some code for the function_parse_error_response which signature is : 
* str -> (ack_error * int * string * string) 
*) 
let parse_response mpd_response = 
    if mpd_response = "OK\n" then Ok 
    else parse_error_response mpd_response 

私はtest.mlを作成しました:

(* ocamlfind ocamlc -o test -package oUnit -linkpkg -g mpd.ml test.ml *) 
open OUnit2 

let test_ok test_ctxt = assert_equal Ok Mpd.parse_response "OK\n" 

let mpd_tests = 
    "mpd_tests" >::: 
    ["test OK" >:: test_ok] 

let() = 
    run_test_tt_main mpd_tests 

そして、私はそれをコンパイルしようとすると、私は次のようなエラーがあります。

ocamlfind ocamlc -o test -package oUnit -linkpkg -g mpd.ml test.ml 
File "mpd.ml", line 84, characters 7-40: 
Error: This expression has type ack_error * int * string * string 
     but an expression was expected of type response 

答えて

1

parse_error_response mpd_responseを入力していますack_error * int * string * stringではなく、responseです。あなたはErrorコンストラクタでラップするだけです:

let parse_response mpd_response = 
    if mpd_response = "OK\n" then Ok 
    else Error (parse_error_response mpd_response) 
関連する問題