1234567891011121314151617181920212223242526272829303132333435363738394041openCore_kerneltype'at=Consof'a*'alistletinitn~f=ifn<1theninvalid_arg"Non_empty_list should be at least of length 1";Cons(f0,List.init(n-1)~f:(funi->f(i+1)))letconsht=Cons(h,t)letfold(Cons(h,t))~init~f=List.foldt~f~init:(finith)letmap(Cons(h,t))~f=cons(fh)(List.mapt~f)letiter(Cons(h,t))~f=fh;List.itert~fletto_list(Cons(h,t))=h::tletfilter_map(Cons(h,t))~f=matchfh,List.filter_mapt~fwith|None,[]->None|None,h::t->Some(Cons(h,t))|Someh,l->Some(Cons(h,l))letfor_all(Cons(h,t))~f=fh&&List.for_allt~fletexists(Cons(h,t))~f=fh||List.existst~flethd(Cons(h,_))=hletsingletonx=Cons(x,[])letof_list_exn=function|[]->failwith"empty list"|h::t->Cons(h,t)