 extension FixedWidthInteger {
 	/// Shrinks any `IntegerType`.
 	public var shrinkIntegral : [Self] {
-		return unfoldr({ i in
+		let start = self < 0 ? self.multipliedReportingOverflow(by: -1).partialValue : self
+		return [Self](sequence(state: start) { i in
 			if i <= 0 {
 				return .none
 			}
-			let n = i / 2
-			return .some((n, n))
-		}, initial: self < 0 ? self.multipliedReportingOverflow(by: -1).partialValue : self)
+			i = i / 2
+			return .some(i)
+		})
 	}
 }
 

extension BinaryInteger {
	/// Shrinks any `Numeric` type.
	public var shrinkIntegral : [Self] {
		return unfoldr({ i in
			if i <= 0 {
				return .none
			}
			let n = i / 2
			return .some((n, n))
		}, initial: self < 0 ? (self * -1) : self)
	}
}


		return [Element](Set(self))
	}
}
#if os(Linux)
	import Glibc
#else
