Mostrar instancia para matriz en Haskell

He estado tratando de crear una instancia de show para visualizar una matriz dada y también, para crear un esquema con columnas alrededor y entre la matriz. Lo que logré lograr hasta ahora es lo siguiente:

data Mat a = Mat [[a]]
instance (Show a) => Show (Mat a) where
show (Mat x) = "\n" ++ " ---\n"++unlines ( map (\r -> showRow r ++ "\n ---") x ) ++ "\n"
    where
      showRow list = "¦ "++unwords ( map (\v -> show v ++" ¦") list)

Asumiendo que tenemos una matrizMat [[1,2,3],[4,5,6]] que nos gustaría probar

El resultado de la línea de comando es el siguiente:

 ---
¦ 1 ¦ 2 ¦ 3 ¦
 ---
¦ 4 ¦ 5 ¦ 6 ¦
 ---

Lo que me gustaría lograr es formatear la matriz dada con líneas horizontales sobre el resto de cada columna, así:

 --- --- ---
¦ 1 ¦ 2 ¦ 3 ¦
 --- --- ---
¦ 4 ¦ 5 ¦ 6 ¦
 --- --- ---

Respuestas a la pregunta(1)

Su respuesta a la pregunta