Example of using type erasure in a partially insta

Run Settings
LanguageMercury
Language Version
Run Command
:- module main. %=============================================================================% :- interface. %=============================================================================% :- import_module io. %-----------------------------------------------------------------------------% :- typeclass stringify_concatenate(A, B) where [ func stringify_concatenate(A, B) = string ]. %-----------------------------------------------------------------------------% :- instance stringify_concatenate(string, int). %-----------------------------------------------------------------------------% :- type partial(T). %-----------------------------------------------------------------------------% :- func create_partial(A) = partial(B) <= stringify_concatenate(A, B). %-----------------------------------------------------------------------------% :- func finalize(partial(B), B) = string. %-----------------------------------------------------------------------------% :- pred main(io::di, io::uo) is det. %=============================================================================% :- implementation. %=============================================================================% :- use_module string. %-----------------------------------------------------------------------------% :- instance stringify_concatenate(string, int) where [ stringify_concatenate(Str, I) = string.append(Str, string.from_int(I)) ]. %-----------------------------------------------------------------------------% :- type partial(T) ---> partial(func(T) = string). %-----------------------------------------------------------------------------% create_partial(A) = partial(stringify_concatenate(A)). %-----------------------------------------------------------------------------% finalize(partial(Func), B) = Func(B). %-----------------------------------------------------------------------------% main(!IO) :- create_partial("ABC") = Partial, finalize(Partial, 123) = Str, io.write_string(Str, !IO), io.nl(!IO).
Editor Settings
Theme
Key bindings
Full width
Lines