Vấn đề bây giờ là tôi có một codebase đang phát triển, ngay sau khi tôi thay đổi một điều, mã của tôi bị hỏng khắp nơi và tôi bị tiêu thụ với theo dõi tất cả các vấn đề.
Điều này thực sự được quảng cáo dưới dạng tính năng trong Yesod (một khung web Haskell). Giả sử tôi đã xác định các đặc điểm kỹ thuật định tuyến sau:
/blog/#String BlogR GET
Và tôi đã quyết định muốn thay đổi nó để
/blog/#Date/#String BlogR GET
Ngay sau khi tôi thực hiện thay đổi này để các tuyến đường, trình biên dịch sẽ cho tôi biết ở khắp mọi nơi mà Tôi đã phá vỡ mã của tôi. Tôi sẽ bị buộc cập nhật chức năng getBlogR
- thay đổi loại đầu vào của nó để nó cũng chấp nhận Date
. Tôi cũng sẽ bị buộc phải cập nhật bất kỳ nơi nào tôi sử dụng URL an toàn loại trong các mẫu của mình, trông giống như là @{BlogR (slug p)}
->@{BlogR (date p) (slug p)}
.
Đây được xem là một Tốt Thing, bởi vì kiểm tra loại là giúp bạn tìm lỗi nào do những thay đổi bạn đã thực hiện.
Hiện tại, liên quan đến ghci.
ghci> let shew = show
ghci> :t shew
shew ::() -> String
ghci> :t show
show :: Show a => a -> String
Đôi khi đúng là ghci chọn mặc định gây phiền nhiễu. Điều này, tuy nhiên, có thể được giảm bớt.
ghci> :set -XNoMonomorphismRestriction
ghci> let shew = show
ghci> :t shew
shew :: Show a => a -> String
Trong khi sử dụng ghci để khám phá các loại của một hàm là rất tốt cho người mới bắt đầu, tôi sẽ không khuyên bạn nên dựa trên ghci. Tìm hiểu ý nghĩa của chữ ký loại và cách tự khám phá chúng. Trong thực tế, bắt đầu viết một hàm bằng cách đầu tiên viết chữ ký kiểu mà bạn dự định có. Nó chỉ mất một khoản đầu tư nhỏ thời gian để tìm hiểu kỹ năng này, và nó là một lợi ích lớn để lập trình khi bạn có thể sử dụng hệ thống kiểu của Haskell để lợi thế của bạn.
Nguồn
2012-02-10 16:33:28
Điều đó có vẻ hơi lạ. Chính xác những gì bạn đang làm mà phá vỡ tất cả các mã? Bạn có đang thay đổi các loại liên tục không? Thông thường, người ta sẽ tự sửa một thiết kế cho các kiểu của nó sau một thời gian (hoặc ngay cả khi bắt đầu), và hầu hết công việc sẽ nằm trên phần còn lại của mã (trong một Haskell được viết đúng cách sẽ độc lập đáng kinh ngạc). Cũng lưu ý rằng nếu bạn đang thêm các hàm tạo vào kiểu của bạn, sẽ không có gì đáng ngạc nhiên khi mã xử lý kiểu ngắt đó và trình biên dịch có ích trong việc chỉ ra các vấn đề tiềm ẩn, mặc dù generics có thể giúp nếu nó không phá vỡ mã. .. – Jedai
Có lẽ bạn cần thực hiện một số từ đồng nghĩa hoặc loại định nghĩa để thay đổi của bạn có thể được bản địa hóa thành một điểm? – augustss
Bạn có thể đưa ra một số ví dụ về những gì đang cố gắng đạt được và bạn mong đợi nó sẽ hoạt động như thế nào? – ondra