Tôi đang suy nghĩ về cách sử dụng hệ thống kiểu của Haskell để thực thi mô đun trong một chương trình. Ví dụ, nếu tôi có một ứng dụng web, tôi tò mò nếu có một cách để tách tất cả các mã cơ sở dữ liệu khỏi mã CGI từ mã hệ thống tập tin từ mã thuần túy.Sử dụng hệ thống kiểu Haskell để thực thi mô đun
Ví dụ, tôi hình dung một đơn nguyên DB, vì vậy tôi có thể viết các chức năng như:
countOfUsers :: DB Int
countOfUsers = select "count(*) from users"
Tôi muốn nó là không thể sử dụng các tác dụng phụ khác so với những người được hỗ trợ bởi các đơn nguyên DB. Tôi đang hình dung một đơn vị cấp cao hơn sẽ bị giới hạn đối với các trình xử lý URL trực tiếp và sẽ có thể soạn các cuộc gọi đến trình đơn DB và trình đơn IO.
Điều này có khả thi không? Đây có phải là khôn ngoan không?
Cập nhật: tôi đã kết thúc đạt được điều này với Scala thay vì Haskell: http://moreindirection.blogspot.com/2011/08/implicit-environment-pattern.html
Cảm ơn, Don! Các giải pháp trước đây âm thanh như những gì tôi đang tìm kiếm. Bạn có biết bất kỳ gói cụ thể nào sử dụng kỹ thuật này hay các thuật ngữ tốt cho google cho ("hạn chế IO monad" không bật lên nhiều)? – Bill
Một ví dụ điển hình về khái niệm 'đơn sơ yếu', http://blog.sigfpe.com/2007/04/trivial-monad.html –
Cảm ơn. Nếu tôi chọn sử dụng mẫu "monome độc hại" cho đơn nguyên DB của mình, tôi phải làm gì để trích xuất dữ liệu từ đơn nguyên DB? Có xử lý hành động HTTP của tôi phải sử dụng một biến áp monad với DB trong nó? – Bill