let list_map (_func: '-> 'a) (_list: 'a list) : 'a list =

  let rec list_map' list =
    match list with
      | [] ->
          []
            
      | head :: tail ->
          let tail' =
            list_map' tail
          and head' =
            _func head
          in
            if tail == tail'
               &&
               head == head'
            then
              list
            else
              head' :: tail'
            
  in
    list_map' _list