Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- protocol NListType : SequenceType {
- typealias Element
- init()
- var ar: [Element] { get }
- }
- extension NListType {
- func generate() -> IndexingGenerator<[Element]> {
- return ar.generate()
- }
- var count: Int { return ar.count }
- }
- struct Empty<Element> : NListType {
- init() {}
- let ar: [Element] = []
- }
- struct NList<Element, Tail: NListType where Tail.Element == Element> : NListType {
- init(_ head: Element, _ tail: Tail = Tail()) {
- self.tail = tail
- self.head = head
- }
- init() { fatalError() }
- var ar: [Element] { return [head] + tail.ar }
- let tail: Tail
- let head: Element
- }
- infix operator |> { associativity right precedence 90 }
- func |><E, L : NListType where L.Element == E>(lhs: E, rhs: L) -> NList<E, L> {
- return NList(lhs, rhs)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement