Lo siguiente me funciona y creo que cumple lo que quieres hacer
chNameValueCell :: Cell -> CellName -> CellValue -> Cell
chNameValueCell2chNameValueCell (Cell t cn (ValueEntero v)) cn2 (ValueEntero v2) = Cell t cn2 (ValueEntero v2)
chNameValueCell2chNameValueCell (Cell t cn (ValueBoolean v)) cn2 (ValueBoolean v2) = Cell t cn2 (ValueBoolean v2)
chNameValueCell2chNameValueCell (Cell t cn (ValueListaInt v)) cn2 (ValueListaInt v2) = Cell t cn2 (ValueListaInt v2)
chNameValueCell2chNameValueCell (Cell t cn (ValueObject)) cn2 (ValueObject) = Cell t cn2 (ValueObject)
chNameValueCell2chNameValueCell (Cell t cn _) cn2 _ = error "tipos no validos"
saludos
JJ