 public protocol Arbitrary {
 	static func arbitrary() -> Gen<Self>
 	static func shrink(Self) -> [Self]
+}
+
+/// The implementation of a shrink that returns no alternatives.
+public func shrinkNone<A>(_ : A) -> [A] {
+	return []
+}
+
+/// Shrinks any IntegerType.
+public func shrinkIntegral<A : IntegerType>(x : A) -> [A] {
+	return unfoldr({ i in
+		if i <= 0 {
+			return .None
+		}
+		let n = i / 2
+		return .Some((n, n))
+	}, initial: x)
 }
 
 

		ini = next.1
	}
	return acc
}

public func shrinkIntegral<A : IntegerType>(x : A) -> [A] {
	return unfoldr({ i in
		if i <= 0 {
			return .None
		}
		let n = i / 2
		return .Some((n, n))
	}, initial: x)
}

public func shrinkFloat(x : Float) -> [Float] {
	return unfoldr({ i in
		if i == 0.0 {
			return .None
		}
		let n = i / 2.0
		return .Some((n, n))
	}, initial: x)
}

public func shrinkDouble(x : Double) -> [Double] {
	return unfoldr({ i in
		if i == 0.0 {
			return .None
		}
		let n = i / 2.0
		return .Some((n, n))
	}, initial: x)
}



	}
}

private func bits<N : IntegerType>(n : N) -> Int {
	if n / 2 == 0 {
		return 0
