순수 함수 특징 :
- 같은 인풋에 같은 아웃풋
- 같은 인풋에 캐싱이 가능힌다
그럼 예시 상황
DB 조회는 DB 의 상태에 따라 에러가 발생가능
유저 인덱스로 유저 조회를 해도 유저가 없는 등의 에러가 있을 수 있음
그래서 모나드로 감싸서 유저정보 A를 에러를 함께 리턴했다고 가정
순수 함수형 언어에선 모나드 M[A] 에서
A 값을 직접적으로 얻는법을 제한해서 순수성을 유지
여기서 궁금증
(Index) -> M[A] 라는 함수는 캐싱이 가능한가?
- 같은 인풋에 같은 아웃풋
- 같은 인풋에 캐싱이 가능힌다
그럼 예시 상황
DB 조회는 DB 의 상태에 따라 에러가 발생가능
유저 인덱스로 유저 조회를 해도 유저가 없는 등의 에러가 있을 수 있음
그래서 모나드로 감싸서 유저정보 A를 에러를 함께 리턴했다고 가정
순수 함수형 언어에선 모나드 M[A] 에서
A 값을 직접적으로 얻는법을 제한해서 순수성을 유지
여기서 궁금증
(Index) -> M[A] 라는 함수는 캐싱이 가능한가?
(Index) -> Optional[A]가 캐싱이 안될 이유가 있음?
그렇다면 () -> IO Char 를 캐싱할 수도 있음?
캐싱은 되는데 실행시간에 결정되는 중요한 정보는 캐시된 내용에 안 들어가지. 애초에 IO Char가 별게 아니고 Char를 반환하는 IO 프로시저임. 인자 없는 IO 프로시저는 () -> IO Char 가 아니라 그냥 IO Char타입으로 나타내면 되고 인자 있는 IO 프로시저를 (Index) -> IO Char타입으로 나타내는 건데 여기서 캐싱을 해봐야 저장되는 건 어떤 Index를 넣었을 때 어떤 IO 프로시저가 얻어지느냐 뿐임. 당연히 실제 실행시간에 결정되는 관계된 중요한 정보는 캐시된 내용에 안 들어가지. 그게 맞고.
위 경우에는 DB를 읽어야 하니까 애초에 Optional 모나드가 아니라 다른걸 써야겠네. IO 모나드나 IO랑 Optional 기능 모두 있는거 써야할듯.