module Data.List1

import Prelude

infixr 7 _:::_

record List1 a where
  constructor _:::_
  head1 : a
  tail1 : List a

split1 : String → String → List1 String
split1 str by = case split str by of
  Nil => str ::: Nil
  x :: xs => x ::: xs

unsnoc : ∀ a. List1 a → List a × a
unsnoc {a} (x ::: xs) = go x xs
  where
    go : a → List a → List a × a
    go x Nil = (Nil, x)
    go x (y :: ys) = let (as, a) = go y ys in (x :: as, a)

splitFileName : String → String × String
splitFileName fn = case split1 fn "." of
    part ::: Nil => (part, "")
    xs => mapFst (joinBy ".") $ unsnoc xs
