let ($) f x = f x ;; let (<*>) f g x = f (g x) ;; let flip f a b = f b a ;; let fst (a, b) = a ;; let snd (a, b) = b ;; let rec pad v i l = match i with 0 -> l | n -> v :: (pad v (i - 1) l) ;; let char_list_of_string s = let str_length = String.length s in let rec aux s l buff = if l = str_length then buff else aux s (l + 1) ((String.get s l)::buff) in List.rev $ aux s 0 []