package scotch.text.show; import static java.util.Arrays.asList; import static scotch.symbol.type.TypeDescriptors.fn; import static scotch.symbol.type.TypeDescriptors.sum; import static scotch.symbol.type.TypeDescriptors.var; import static scotch.runtime.RuntimeSupport.applicable; import static scotch.runtime.RuntimeSupport.flatCallable; import scotch.symbol.Member; import scotch.symbol.TypeClass; import scotch.symbol.TypeParameter; import scotch.symbol.Value; import scotch.symbol.ValueType; import scotch.symbol.type.TypeDescriptor; import scotch.runtime.Applicable; import scotch.runtime.Callable; @SuppressWarnings("unused") @TypeClass(memberName = "Show", parameters = { @TypeParameter(name = "a"), }) public interface Show<A> { @Value(memberName = "show") static <A> Applicable<Show<A>, Applicable<A, String>> show() { return applicable(instance -> applicable(operand -> flatCallable(() -> instance.call().show(operand)))); } @ValueType(forMember = "show") static TypeDescriptor show$type() { return fn(var("a", asList("scotch.text.show.Show")), sum("scotch.data.string.String")); } @Member("show") Callable<String> show(Callable<A> operand); }