2013-08-19 39 views
7

Tôi đang lập trình một huấn luyện viên từ vựng trong Haskell trong thời gian rảnh rỗi của tôi.Có cơ sở dữ liệu Haskell sử dụng các kiểu dữ liệu đại số không?

Tôi có một tập tin với dòng chữ nơi mục được mô hình hóa như các kiểu dữ liệu đại số, mà trông giống như

Word { _frq=1 
    , _fra="le" 
    , _eng="the; him, her, it, them" 
    , _deu="der,die,das; er,sie,es" 
    , _uses=[Determiner [], Pronoun []] 
    , _phrase=" vive la politique, vive l'amour" 
    , _sentence="long live politics, long live love" 
    , _satz="Lang lebe die Politik, lang lebe die Liebe." 
    } 

thường Hầu hết các bản dịch tiếng Đức _deu=_satz= là thường xuyên nhất chỉ là một chuỗi rỗng mà tôi muốn cập nhật trong chương trình.

Bây giờ tôi có một số câu hỏi: 1. Có cơ sở dữ liệu nào sử dụng kiểu dữ liệu Haskell cho haskell (Tôi thực sự thích kiểu an toàn trong cơ sở dữ liệu của mình không?) Những điều tôi tìm thấy là các ràng buộc HDBC với MySQL và tương tự, và một số thứ xml/JSON khác.

  1. Nếu tôi cập nhật tệp thay vì sử dụng cơ sở dữ liệu, có cách nào đó xung quanh biên dịch lại toàn bộ chương trình - sẽ hơi tẻ nhạt khi làm điều đó.

và một câu hỏi thứ ba

Tôi muốn lưu các từ vựng đã học được trong một datastructure mà cần thường xuyên được cập nhật, cũng như trong từng bước học tập tôi cập nhật một số chỉ sự hiểu biết của từ này - và sắp xếp này datastructure trong khi chèn/hoặc sau đó. Sau đó, tôi chọn một từ mới dựa trên vị trí của nó trong datastructure này. Danh sách dường như không hiệu quả để thực hiện một danh sách đầy đủ traversal và phân loại là một nỗ lực lớn nếu có một giải pháp tốt hơn. Một lưu ý cuối cùng tôi chỉ có 5000 mục danh sách, vì vậy có lẽ nó đáng lo ngại về tốc độ ở sai địa điểm?

Trả lời

9

Cơ sở dữ liệu khôn ngoan, hãy xem Acid-State. Ngoài ra còn có a tutorial cho nó như là một phần của khóa học Happstack Crash Course.

Nó làm những gì bạn yêu cầu trong việc duy trì an toàn loại trong mô hình. Tôi không chắc chắn điều này sẽ hữu ích cho bạn như thế nào, nhưng tôi đã sử dụng nó trong một vài ứng dụng web, bao gồm herehere (thứ hai là một phần của nỗ lực đánh giá chấm điểm HDBC đối với MongoDB và AcidState, vì vậy bạn có thể sử dụng nó để xem làm thế nào ba so sánh thực hiện khôn ngoan trong bối cảnh của một ứng dụng web Haskell).

Câu hỏi thứ ba của bạn, với 5000 lần chèn/lần đọc, bạn thực sự không nên lo lắng về hiệu suất. Nếu bạn nhìn vào those benchmarks I mentioned, điểm chuẩn "lớn" chạy một (tương đối nhỏ) 50 000 giao dịch theo thứ tự rất ngắn, và chúng được chèn thêm thịt hơn những gì bạn có vẻ đang làm.

+1

Máy chủ http://acid-state.seize.it/ không phản hồi vào ngày 2016-07-17. Tôi đã thay đổi liên kết đến repo GitHub. Nếu đây là lỗi tạm thời, vui lòng đặt liên kết gốc trở lại. –

7

Check-out Persistent từ Yesod:

dai dẳng là câu trả lời Yesod của số liệu storage- một loại an toàn, giao diện lưu trữ dữ liệu phổ biến cho Haskell.

[...]

dai dẳng cho phép chúng ta lựa chọn trong số cơ sở dữ liệu hiện có mà được đánh giá cao điều chỉnh đối với trường hợp sử dụng lưu trữ dữ liệu khác nhau, tương thích với các ngôn ngữ lập trình khác, và sử dụng một giao diện truy vấn an toàn và hiệu quả, trong khi vẫn giữ an toàn loại của các kiểu dữ liệu Haskell.

Đồng nhất tuân theo nguyên tắc hướng dẫn về an toàn loại và súc tích, cú pháp khai báo.

+3

Có thể liên tục xử lý các loại tổng hợp như 'Either'? –

+0

@GabrielGonzalez Tôi vẫn đang học nó, vì vậy tôi không chắc chắn, nhưng đoán không. –

+3

Nó có hỗ trợ cơ bản cho các loại tổng, nhưng sự hỗ trợ đó thực sự được xây dựng xung quanh các ràng buộc cơ sở dữ liệu trái ngược với việc cho phép nhúng các ADT hoàn toàn tùy ý. –

Các vấn đề liên quan