возможно этот кейс можно решить просто в компайлтайме темплейт-хаскелем, ну вдруг
нет, разумеется если бы все можно было заинлайнить и зашить, то вопросов нет. тут я подвожу к более общему вопросу - IO и чистоты.
в этом сеттинге очевидно есть write в какой-то сокет по сети, однако с точки зрения всей системы мы знаем что функция детерминированная, не меняет глобального состояния, для одних аргументов вернет одно и то же - можно же назвать чистой? с оговоркой на хардварь и условие "ненаход ipfs файла = ошибка хардвари = можно падать в корку"
короче говоря, получается что система типов замкнута в рамках одной ноды и нет способа объяснить что архитектурно это чисто.
тем более, что если 1990 почти все программы были десктопными/локальными, сейчас все наоборот и для серверов и для (тонких, зачастую вебовских) клиентов
короче, почему есть только одно IO-с-т.з.-локалхоста, когда я точно знаю что в проде все связано по сети, оно везде есть, мне интересно IO-с-т.з.-системы, т.е. либо запись-изменение-ее-состояния, либо поход во внешние апи.
еще короче, запись в сокет семантически означает _разное_, но тип для этого один 😕