[Ur] Implicit problem in typeclass recursive instance [testable t]	-> testable (list t)
    Gabriel Riba 
    griba2001 at gmail.com
       
    Mon Jan 19 14:33:42 EST 2015
    
    
  
Gabriel Riba <griba2001 <at> gmail.com> writes:
> 
> Hi!
> 
> Here is the code:
> 
> (* --- *)
> 
> fun id [a] (x: a): a = x
> 
> type assertion = transaction xbody
> 
> datatype test = Test of assertion | TestList of (list test)
> 
> (* class *)
> con testable t = {TestIt: t -> test}
> fun mkTestable [t] (f: t -> test): testable t = {TestIt = f}
> val testIt [t] (r: testable t): (t -> test) = r.TestIt
> 
> (* instances *)
> val testable_test: testable test = mkTestable id
> 
> val testable_testList [t] (_: testable t): testable (list t) =
>      let
>           fun testIt' (t1: list t): test =
>                TestList (List.mp testIt t1)    (* line with error *)
>      in mkTestable testIt'
>      end
> 
> (* --- *)
> 
Workaround: make the parameter explicit (it compiles now):
val testable_testList[t] (r: testable t): testable (list t) =
     let
          fun testIt' (tlist: list t): test =
               TestList (List.mp (testIt r) tlist)
     in mkTestable testIt'
     end
    
    
More information about the Ur
mailing list