Browse thread
Making a polymorphic type non-polymorphic to comply with original signature
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Thomas Gazagnaire <ocaml@g...> |
| Subject: | Re: [Caml-list] Making a polymorphic type non-polymorphic to comply with original signature |
Or you can also functorize your own piece of code :
module Make (A : sig type t end) =
struct
module rec H :
sig
type 'a node =
| Node of 'a node J.t
| Leaf of 'a
type t = A.t node
val equal : t -> t -> bool
val hash : t -> int
end =
struct
type 'a node =
| Node of 'a node J.t
| Leaf of 'a
type t = A.t node
let equal = (==)
let hash = Hashtbl.hash
end
and J : Hashtbl.S with type key = A.t H.node = Hashtbl.Make( H )
end
2009/1/20 Hugo Ferreira <hmf@inescporto.pt>
> David Teller wrote:
>
>> It's probably feasible without copy & paste by building a functor on top
>> of the defunctorized hashtable in Batteries. Or by just using the
>> defunctorized hashtable of Batteries directly, although it's not as safe
>> as the functorized version, due to the absence of existential types.
>>
>>
> If I understand you correctly I would have to redefine equivalents for:
> - HashedType
> - S
> - Make(H: HashedType)
>
> Basically copy & paste these and change the type.
> Doable although not to my liking.
>
> TIA,
> Hugo F.
>
>
> Cheers,
>> David
>>
>> On Tue, 2009-01-20 at 12:24 +0100, Daniel Bünzli wrote:
>>
>>> Le 20 janv. 09 à 11:59, Hugo Ferreira a écrit :
>>>
>>> Is it possible to make H comply with Hashtbl.HashedType i.e: make
>>>> J.Key = 'a H.node ?
>>>>
>>> This issue is well known (e.g. see here [1]). Your are running into
>>> limitations of the standard library. The only unsatisfying answer is to
>>> copy the code from the standard library and add the parameter yourself.
>>>
>>> Best,
>>>
>>> Daniel
>>>
>>> [1]
>>> http://groups.google.com/group/fa.caml/browse_thread/thread/f2acb593da91553c?hl=fr&ie=UTF-8&q=type+var+in+functor+fa.caml
>>>
>>> ____________________________________________ugs
>>>
>>>
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>