나는 Warp (및 Scotty 가능) 및 acid-state를 사용하여 Haskell에서 매우 간단한 CRUD 웹 서비스를 만들고 있습니다.haskell에서 aeson을 사용하여 부분 json 객체 구문 분석
산성 상태에서 사용자 레코드는 Data.Map에 저장됩니다 (예 : this). 나는 그 기록들이 창조 될 때마다 완전 할 것이라는 것을 안다. 그래서 나는 Maybe를 많이 가질 필요가 없다. 그러나 사용자를 업데이트 할 때 클라이언트는 필드 중 일부만 채워진 부분 json 객체를 보내도록 선택할 수 있습니다.
이것을 표현하는 관용적 인 방법은 무엇입니까? MaybeS가없는 FullUser와 모든 선택적 키인 PartialUser 앞에 MaybeS와 정확히 동일한 데이터 선언이 있어야하며 aeson이 자동으로 후자에 대한 인코딩 및 디코딩을 유도하고 마지막으로 유형의 자체 업데이트 함수를 작성합니다. FullUser -> PartialUser -> FullUser?
코드가별로 좋지는 않지만 약간 추한 느낌을 주며 조금이라도 DRY를 위반하는 것처럼 보입니다. 웹 서버에서 이와 같은 공통 작업을 수행해야하므로 아마도 TH로 일반적으로 이미 해결되었습니다.
나는 json 문자열을 저장할 수 있고 항상 누락 된 키가 있는지 확인할 수 있으므로 스키마 변경에 대해 조금 어둡지 만 미래의 증거가 될 수 있지만, 여전히 "유형 안전 "길.
EDIT : 또는 FullUser와 json 문자열에서 간단한 업데이트 기능을 작성하려면 aeson-lens 만 사용해야합니다.
입력 해 주셔서 감사합니다. 그래, 그 이름은 단지 질문을 명확하게하는 것이었다. 이 경우 생성 된 인스턴스로는 충분하지 않으므로 FullUser 및 json 문자열을 사용하고 aeson-lens (그리고 FullUser 용 렌즈)를 사용하여 업데이트하는 업데이트 기능을 사용할 것입니다. – Gurgeh