compilerOptsEditor :: Editor [(CompilerFlavor, [String])]
compilerOptsEditor p noti =
    multisetEditor
        (ColumnDescr True [("Compiler",\(compiler, _) -> [cellText := T.pack $ show compiler])
                           ,("Options",\(_, opts    ) -> [cellText := T.pack $ unwords opts])])
        (compilerOptRecordEditor,
            paraOuterAlignment <<<- ParaInnerAlignment (0.0, 0.5, 1.0, 1.0)
                $ paraInnerAlignment <<<- ParaOuterAlignment (0.0, 0.5, 1.0, 1.0)
                   $ emptyParams)
        (Just (sortBy (\ (f1, _) (f2, _) -> compare f1 f2)))
        (Just (\ (f1, _) (f2, _) -> f1 == f2))
        (paraShadow <<<- ParaShadow ShadowIn
            $ paraOuterAlignment <<<- ParaInnerAlignment (0.0, 0.5, 1.0, 1.0)
                $ paraInnerAlignment <<<- ParaOuterAlignment (0.0, 0.5, 1.0, 1.0)
                    $ paraDirection  <<<-  ParaDirection Vertical
                        $ paraPack <<<- ParaPack PackGrow
                            $ p)
        noti
compilerOptsEditor :: Editor [(CompilerFlavor, [String])]
compilerOptsEditor p noti =
    multisetEditor
        (ColumnDescr True [("Compiler",\(compiler, _) -> [cellText := T.pack $ show compiler])
                           ,("Options",\(_, opts    ) -> [cellText := T.pack $ unwords opts])])
        (compilerOptRecordEditor,
            paraOuterAlignment <<<- ParaInnerAlignment (0.0, 0.5, 1.0, 1.0)
                $ paraInnerAlignment <<<- ParaOuterAlignment (0.0, 0.5, 1.0, 1.0)
                   $ emptyParams)
        (Just (sortBy (\ (f1, _) (f2, _) -> compare f1 f2)))
        (Just (\ (f1, _) (f2, _) -> f1 == f2))
        (paraShadow <<<- ParaShadow ShadowIn
            $ paraOuterAlignment <<<- ParaInnerAlignment (0.0, 0.5, 1.0, 1.0)
                $ paraInnerAlignment <<<- ParaOuterAlignment (0.0, 0.5, 1.0, 1.0)
                    $ paraDirection  <<<-  ParaDirection Vertical
                        $ paraPack <<<- ParaPack PackGrow
                            $ p)
        noti
compilerOptsEditor p noti =
    multisetEditor
        (ColumnDescr True [("Compiler",\(compiler, _) -> [cellText := T.pack $ show compiler])
                           ,("Options",\(_, opts    ) -> [cellText := T.pack $ unwords opts])])
        (compilerOptRecordEditor,
            paraOuterAlignment <<<- ParaInnerAlignment (0.0, 0.5, 1.0, 1.0)
                $ paraInnerAlignment <<<- ParaOuterAlignment (0.0, 0.5, 1.0, 1.0)
                   $ emptyParams)
        (Just (sortBy (\ (f1, _) (f2, _) -> compare f1 f2)))
        (Just (\ (f1, _) (f2, _) -> f1 == f2))
        (paraShadow <<<- ParaShadow ShadowIn
            $ paraOuterAlignment <<<- ParaInnerAlignment (0.0, 0.5, 1.0, 1.0)
                $ paraInnerAlignment <<<- ParaOuterAlignment (0.0, 0.5, 1.0, 1.0)
                    $ paraDirection  <<<-  ParaDirection Vertical
                        $ paraPack <<<- ParaPack PackGrow
                            $ p)
        noti