Implement Interface using generics
Move Input to its own crate
Move curses to its own crate