#ifndef STRING_LI__HPP__
#define STRING_LI__HPP__
#include <string>

typedef unsigned int nat;

class StringLi{
 private:
  std::string hd; 
  StringLi* tl;   
  bool isEmpt;    
 public:
  StringLi();
  StringLi(std::string h,StringLi* t);

  virtual ~StringLi();

  std::string head();
  StringLi* tail();
  bool isEmpty();

  std::string toString();
 private:
  std::string toStringAux();

 public:
  StringLi* copy();
  nat length();
  std::string get(nat i);
  StringLi* take(nat i);
  StringLi* drop(nat i);
  StringLi* sublist(nat from,nat to);
  StringLi* append(StringLi* other);
  bool contains(std::string elem);
};
#endif


