 public extension MChainMap where Dim == _2 {
     public init(bidegree: (Int, Int) = (0, 0), func f: @escaping (Int, Int) -> FreeModuleHom<A, B, R>) {
         let (i, j) = bidegree
-        self.init(mDegree: IntList(i, j), func: { I in f(I[0], I[1]) })
+        self.init(mDegree: IntList(i, j)) { I in f(I[0], I[1]) }
     }
     
     public init(bidegree: (Int, Int) = (0, 0), func f: @escaping (Int, Int, A) -> FreeModule<B, R>) {
         let (i, j) = bidegree
-        self.init(mDegree: IntList(i, j), func: {(I, a) in f(I[0], I[1], a)})
+        self.init(mDegree: IntList(i, j)) { (I, a) in f(I[0], I[1], a) }
     }
     
+    public init(bidegree: (Int, Int) = (0, 0), _ f: FreeModuleHom<A, B, R>) {
+        let (i, j) = bidegree
+        self.init(mDegree: IntList(i, j), f)
+    }
+
     public subscript(_ i: Int, _ j: Int) -> FreeModuleHom<A, B, R> {
         return self[IntList(i, j)]
     }


public extension MChainMap where Dim == _1 {
    public init(degree: Int = 0, func f: @escaping (Int) -> FreeModuleHom<A, B, R>) {
        self.init(mDegree: IntList(degree), func: { I in f(I[0]) })
    }
    
    public init(degree: Int = 0, func f: @escaping (Int, A) -> FreeModule<B, R>) {
        self.init(mDegree: IntList(degree), func: {(I, a) in f(I[0], a)})
    }
    
    public subscript(_ i: Int) -> FreeModuleHom<A, B, R> {

    public var mDegree: IntList
    internal let f: (IntList) -> FreeModuleHom<A, B, R>
    
    public init(mDegree: IntList, _ f: @escaping (IntList) -> FreeModuleHom<A, B, R>) {
        self.mDegree = mDegree
        self.f = f
    }
    
    public init(mDegree: IntList, _ f: @escaping (IntList, A) -> FreeModule<B, R>) {
        self.mDegree = mDegree
        self.f = { I in FreeModuleHom{ a in f(I, a) } }
    }
    
    public init(mDegree: IntList, _ f: FreeModuleHom<A, B, R>) {
        self.mDegree = mDegree
        self.f = { _ in f }
    }
    
    public subscript(_ I: IntList) -> FreeModuleHom<A, B, R> {
