Tôi muốn ghi đè lên các hàm tạo số nguyên mặc định trong Haskell để chúng tạo ra các chuỗi (hầu hết là tò mò, nhưng tạm thời để tạo một thay thế đầu vào tốt cho sự bất tiện của LaTeX \) {}.Làm cách nào để ghi đè hiển thị cho một loại mới?
tôi muốn để có thể sử dụng ngôn ngữ riêng của mình, thay vì một cú pháp đặc biệt, nhưng tôi đoán đó là có lẽ sẽ không làm việc ra ...
module Main where
import Prelude hiding ((+))
newtype A = A Int deriving (Eq, Show, Num)
default (A)
(+) :: A -> (A -> String)
(A a) + (A b) = (show a) ++ " + " ++ (show b)
main2 = 3+4
main :: IO()
main = putStrLn main2
Vấn đề với bên trên là + chức năng chỉ hoạt động cho (A, A) thay vì (A, String), v.v. Nếu đơn giản chỉ bỏ qua mẫu phù hợp "(A a)" và viết "a" thay vào đó, hàm show() sẽ thêm "A" vì vậy "3" trở thành "A 3" thay vì chỉ "3".
Tôi muốn ghi đè Show khác cho việc A, nhưng nó có vẻ là khá đau đầu ...
Cảm ơn, nhưng nó không phải là rất compositional: 3 + 4 + 2 sản lượng '"3 + 4" + 2'. Xin lỗi vì đã là một newbie ... nếu bạn biết cách để giải quyết vấn đề này, tôi sẽ đánh giá cao điều đó! Cảm ơn bạn đã chỉ ra vấn đề chính - xuất hiện Hiển thị. – gatoatigrado
Ok - bây giờ tôi nghĩ rằng tôi hiểu những gì bạn đang cố gắng làm. Xem câu trả lời thứ hai của tôi. Nó sẽ xử lý 3 + 4 + 2 một cách chính xác. – MtnViewMark
Bạn có thể sử dụng kiểu chữ Monoid cho chức năng "+" đó. –