     /// For each message m, a JSON object {"message":m} is added to the stream.
     ///
     /// - Parameter messages: the array of messages to stream.
-    public init(messages: [String]) {
+    public convenience init(messages: [String]) {
         var slice = ArraySlice(messages)
-        stream = { slice.isEmpty ? nil as JSON? : ["message": slice.removeFirst()] }
+        self.init { slice.isEmpty ? nil as JSON? : ["message": slice.removeFirst()] }
     }
 
     /// Creates a new CLStream instance from a list of messages.

public class CLStream {
    fileprivate var stream: () -> JSON? = { nil }

    /// Creates a new CLStream instance from the content of the array.
    ///
    /// - Parameter jsonArray: the array of JSON objects to stream.
    public init(_ jsonArray: [JSON]) {
        var slice = ArraySlice(jsonArray)
        stream = { slice.isEmpty ? nil as JSON? : slice.removeFirst() }
    }

    /// Creates a new CLStream instance from an array of messages.

    /// For each line m, a JSON object {"message":m} is added to the stream.
    ///
    /// - Parameter file: the name of the file.
    public convenience init(file: String) {
        guard let fd = fopen(file, "r") else {
            abort("Error opening file \"\(file)\"")
        }
        self.init {
            var line: UnsafeMutablePointer<Int8>?
            var linecap = 0
            defer { free(line) }
