 //
 //
 
+/// Anything that can be unwrapped.
 public protocol Unwrappable {
+
+    /// Returns the unwrapped value of the receiver.
     func unwrap() -> Any?
 }
 
 extension Optional: Unwrappable {
+
+    /// Returns the unwrapped value of the `Optional`.
     public func unwrap() -> Any? {
         switch self {
         case nil:


postfix operator * {}

public postfix func *(unwrappable: Unwrappable) -> WrappedUnwrappable {
    return WrappedUnwrappable(unwrappable: unwrappable)
}

public extension String {
    init(stringInterpolationSegment expr: Unwrappable) {
        if let unwrapped = expr.unwrap() {
            self.init(stringInterpolationSegment: unwrapped)

    return (unwrapped1 as Wordable) ~ (unwrapped2 as Intable)
}

/**
 Returns a `Word` from the given forms of a word.

 - Parameter singularForm: the singular form the word.
 - Parameter pluralForm: the plural form the word.
 - Returns: a `Word` form the given forms.
 */
public func /(singularForm: String, pluralForm: String) -> Word {
    return Word(singularForm: singularForm, pluralForm: pluralForm)
}
