Недавно, заглянувши в сорцы bytestring, обнаружил что в объявлении типа ByteString используется ForeignPtr вне монады, а остальная часть кода кишит различными «unsafe» функциями, что вызвало у меня некоторое количество удивления, при том сам пакет bytestring помечен как «Trustworthy», немного почитав, я узнал, что модуль Foreign в целом «достаточно безопасен, чтобы спокойно использовать его функции мимо монады, но недостаточно безопасен чтобы исключить монады из реализации вообще».
Хотелось бы узнать, у людей которые контактируют с haskell-сообществом белее тесно чем я, следующие:
- Что думают на этот счёт «Ъ-хаскелисты»?
- Как много людей которые принципиально используют ByteString только внутри IO?
- Подтверждение того что на значения возвращяемые функциями Foreign можно спокойно применять unsafe*PerformIO