use와 result.try 조합은 Gleam에서 제일 좋아하는 부분인데, 요즘 조금 미워지기 시작했어요. 단계마다 다른 모듈을 부르고 모듈마다 자기 오류 타입이 있으니, 줄마다 result.map_error를 달고 다녀요.
pub fn load(id: Int) -> Result(Profile, AppError) {
use row <- result.try(db.fetch(id) |> result.map_error(DbError))
use raw <- result.try(decode(row) |> result.map_error(DecodeError))
use profile <- result.try(validate(raw) |> result.map_error(Invalid))
Ok(profile)
}
생성자를 함수처럼 넘기니까 짧긴 해요. 그래도 줄마다 절반이 배관이고, 정작 중요한 부분인 그 단계가 하는 일은 가운데에 끼어 있어요.
모든 모듈이 가져다 쓰는 거대한 오류 타입 하나는 답이 아니에요. 그게 더 나빠요. 다들 이런 체인을 어떻게 읽기 좋게 유지하세요? 헬퍼를 쓰나요, 모양을 바꾸나요, 아니면 그냥 참고 사나요?