2012-12-09 11 views
7

Vì tôi đang cố gắng tìm hiểu về TH Tôi phát hiện ra rằng nó cho phép các hành động tùy ý IO trong quá trình biên dịch (xem What's so bad about Template Haskell?). Điều này có vẻ khá nguy hiểm đối với tôi. Tại sao vậy? Nó thực sự cần thiết cho một số nhiệm vụ? Hay chỉ đơn giản là thiết kế của nó, để "quăng mọi thứ không tinh khiết vào thùng chứa IO"?Tại sao mẫu Haskell cho phép các hoạt động IO tùy ý trong quá trình biên dịch?

Cập nhật: tôi sẽ cũng quan tâm nếu có bất kỳ nỗ lực thực hiện một tập hợp con safe của TH không cho phép tùy tiện IO hoạt động.

Trả lời

12

Một trong những mục đích chính được sử dụng cho Mẫu Haskell là xây dựng các hằng số từ tài nguyên bên ngoài, như giá trị văn bản lớn từ tệp hoặc xây dựng thông tin (phiên bản, thời gian, môi trường). Rõ ràng, làm điều đó đòi hỏi phải truy cập hệ thống.

Sau đó, nó đi xuống để cố gắng xây dựng một API an toàn cho điều này, hoặc chỉ cho phép tùy ý IO. Sau này được chọn ra đơn giản như thế nào, và làm thế nào để dễ dàng có được một API an toàn sai.