-module(t). % -compile({parse_transform, category}). % -compile({parse_transform, generic}). -export([t/0]). -record(adt, {a, b, c}). % % -record(xxx, {a, b, d, e, f}). % % l() -> % % Encode = generic:encode(#adt{}), % % Decode = generic:decode(#adt{}), % % fun(Fun, Focus) -> % % lens:fmap(fun(X) -> Decode(X) end, Fun(Encode(Focus))) % % end. t() -> generic:lens(#adt{}). % ok. % birthday(#{age : N} = Person) -> % Person#{arg : N+1}. % % lens:p(#adt{ % % a = lens:c(lens:at(<<"a">>, #{}), % % lens:p(#adt{ % % a = lens:at(<<"1">>), % % b = lens:at(<<"2">>), % % c = lens:at(<<"3">>) % % }) % % ) % % }). % % generic_to:adt([z, t, r], generic_of:adt([z, t, r], #adt{a = a, b = b, c = c})). % % G = generic_of:xxx(#xxx{a = a, b = b, e = e, f = f}), % % generic_to:adt(G). % % generic:encode(#adt{}, [a, c]). % % generic:decode(#adt{}, [b, a]). % % decoder:adt(). % % decoder:adt([a, c]). % % encoder: % % generic_of:adt(#adt{a = 1, b = 2, c = 3}). % % generic:encode % % labelled_of:xxx([ % % for(x, [<<"test">>, <<"blah">>]) % % ]). % % % generic:decode(#adt{}). % % % generic:codec(#adt{}). % %% % %% TODO % %% 1. json encode/decode % %% 2. map with binary labels encode/decode % %% % %% generic map codec