[m-users.] Typeclasses

Tomas By tomas at basun.net
Sun Oct 15 00:19:54 AEDT 2017


On 2017-10-14 14:44, Mark Brown wrote:
> On Sat, Oct 14, 2017 at 11:00 PM, Dirk Ziegemeyer <dirk at ziegemeyer.de> 
> wrote:
>> Is it possible at all to define a typeclass key_value_store with the 
>> method search_value and then to declare map as an instance of this 
>> typeclass?
> 
> No, "map" is a constructor, not a type, so you would need a
> constructor class not a typeclass.


Isn't it both?

This is the closest I can get to Dirk's example:


:- type store ---> store(map(int,int)).

:- typeclass key_value_store(S) where [
   pred search_value(S::in,int::in,int::out) is semidet
].

:- instance key_value_store(store) where [
   pred(search_value/3) is my_map_search
].

:- pred my_map_search(store::in,int::in,int::out) is semidet.
my_map_search(store(Map),K,V) :- map.search(Map,K,V).


In some of my old code I am using type classes with type variables, but 
am not really sure why it does not seem to work here.

/Tomas


More information about the users mailing list