List Info

Thread: "ocaml_beginners"::[] Re: ocamlopt cannot infer type, complete short example attached?




"ocaml_beginners"::[] Re: ocamlopt cannot infer type, complete short example attached?
country flaguser name
Norway
2008-03-06 12:42:37

"TENUC70" < TENUC70%40YAHOO.COM">TENUC70YAHOO.COM> WRITES:

> CAN YOU IDENTIFY THE PROBLEM HERE?
&GT; WHY ARE THE TYPE CONSTRAINTS NOT WORKING?
>
>; 1. $ OCAMLOPT TEST_TYPE.MLI TEST.ML
>
> FILE "TEST.ML", LINE 4, CHARACTERS 0-186:
&GT; SIGNATURE MISMATCH:
> MODULES DO NOT MATCH:
&GT; SIG TYPE T = P.T VAL INIT : 'A -> 'B -> 'A * 'B END
> IS NOT INCLUDED IN
> TEST_TYPE.BASETYPE
> VALUES DO NOT MATCH:
&GT; VAL INIT : 'A -> 'B -> 'A * 'B
> IS NOT INCLUDED IN
> VAL INIT : STRING -> INT -> T
>
>
>; 2. INIT IN MAKEBASE() COMMENTED OUT AND SECOND VERSION OF INIT
>; UNCOMMENTED (I.E. EXPLICIT TYPES ARE GIVEN FOR EVERYTHING)
> $ OCAMLOPT TEST_TYPE.MLI TEST.ML
> FILE "TEST.ML", LINE 9, CHARACTERS 43-54:
&GT; THIS EXPRESSION HAS TYPE STRING * INT BUT IS HERE USED WITH TYPE T = P.T
>
>
&GT; ----- TEST_TYPE.MLI ATTACHED HERE ---------
> MODULE TYPE PARAMTYPE =
> SIG
> TYPE T
>
> VAL IS_TRUE: T -> BOOL
>; END
>
> MODULE TYPE BASETYPE =
> SIG
> TYPE T
>
> VAL INIT: STRING -> INT -> T
> END
>
> MODULE MAKEBASE(P : PARAMTYPE) : BASETYPE WITH TYPE T = P.T
> ----- END OF TEST_TYPE.MLI ---------------
&GT;
>
> ------- TEST.ML BEGINS -------------
> OPEN TEST_TYPE
>
&GT; MODULE MAKEBASE(P : PARAMTYPE) : BASETYPE =
> STRUCT
&GT; TYPE T = P.T
>
> LET INIT TEXT LEN = (TEXT, LEN)
>; (* LET INIT (TEXT: STRING) (LEN:INT) : T = (TEXT, LEN) *)
>
> (* THE SECOND DEFINITION WITH EXPLICIT TYPES FAILS ALSO *)
> END

A FUNCTOR IS A "FUNCTION" FROM MODULE TO MODULE. YOURS IS DECLARED OF
TYPE PARAMTYPE -> BASETYPE SO IT MUST ACCEPT ANY MODULE OF TYPE
PARAMTYPE, AND FROM IT BUILD A MODULE OF TYPE BASETYPE.

THERE YOU MODULE CAN ONLY BE APPLIED IF TYPE T IS STRING * INT, BUT
THIS IS NOT DECLARED IN THE PARAMTYPE MODULE TYPE. SO THIS CANNOT
WORK.

YOU HAVE TO CHOOSE :
- ONE POSSIBILITY IS TO MAKE THE PARAMTYPE.T A CONCRET TYPE (THAT IS
STRING * INT), AND THE N YOU CAN USE THIS FACT.
- ANOTHER IS TO MAKE THIS TYPE ABSTRACT, THEN THE FUNCTOR CAN ONLY
MANIPULATE IT THROUGH FUNCTION DECLARED IN PARAMTYPE, AND INIT MUST BE
PART OF IT (OR SOME OTHER WAY TO BUILD A T FROM AN INT AND A STRING).

--
RéMI VANICAT

__._,_.___
.

__,_._,___
"ocaml_beginners"::[] Re: ocamlopt cannot infer type, complete short example attached?
country flaguser name
United States
2008-03-06 13:16:21

Thank you Remi.
It seems that I've abrogated my responsibility to think before
asking questions. Very helpful explanation.
I'll give this group a respite for 3 months.

--- In ocaml_beginners%40yahoogroups.com">ocaml_beginnersyahoogroups.com, Remi Vanicat
> You have to choose :
> - one possibility is to make the ParamType.t a concret type (that is
> string * int), and the n you can use this fact.
&gt; - another is to make this type abstract, then the functor can only
>; manipulate it through function declared in ParamType, and init must be
> part of it (or some other way to build a t from an int and a string).
>
>
> --
> Rémi Vanicat
>

__._,_.___
.

__,_._,___
[1-2]

about | contact  Other archives ( Real Estate discussion Medical topics )