Advertisement
Guest User

Untitled

a guest
Sep 4th, 2015
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.77 KB | None | 0 0
  1. protocol NListType : SequenceType {
  2. typealias Element
  3. init()
  4. var ar: [Element] { get }
  5. }
  6.  
  7. extension NListType {
  8. func generate() -> IndexingGenerator<[Element]> {
  9. return ar.generate()
  10. }
  11. var count: Int { return ar.count }
  12. }
  13.  
  14. struct Empty<Element> : NListType {
  15. init() {}
  16. let ar: [Element] = []
  17. }
  18.  
  19. struct NList<Element, Tail: NListType where Tail.Element == Element> : NListType {
  20.  
  21. init(_ head: Element, _ tail: Tail = Tail()) {
  22. self.tail = tail
  23. self.head = head
  24. }
  25.  
  26. init() { fatalError() }
  27.  
  28. var ar: [Element] { return [head] + tail.ar }
  29.  
  30. let tail: Tail
  31. let head: Element
  32.  
  33. }
  34.  
  35. infix operator |> { associativity right precedence 90 }
  36.  
  37. func |><E, L : NListType where L.Element == E>(lhs: E, rhs: L) -> NList<E, L> {
  38. return NList(lhs, rhs)
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement