나는 데이터를 취하고 같은 데이터 또는 약간 수정 된 버전을 반환하는 함수를 가지고있다.하스켈에서의 평등의 효율성
내 프로그램이 변경된 경우 하나의 작업을 수행하고 변경하지 않은 경우 다른 작업을 수행하려고합니다.
이전에 나는 (Bool,Object)
쌍을 반환했으며 fst
을 사용하여 변경되었는지 확인했습니다. 최근에는 객체를 반환하고 동등성을 검사하여 코드를 단순화 할 수 있다고 ==
을 통해 알게되었습니다.
하지만 하스켈은 깊은 평등 검사와 "객체 동일성"(즉, 포인터 평등)을 구분하지 않는다는 것을 깨달았습니다. 그렇다면 ==
을 사용하는 것이 효율적인지 아닌지 어떻게 알 수 있습니까? 효율성상의 이유로 그것을 피해야합니까, 아니면 컴파일러가 깊은 평등 검사를 수행 할 필요가 없다고 판단 할 수있는 경우가 있습니까?
일반적으로 초기 프로그램을 작성하는 동안 효율성에 대해 너무 걱정하지 않지만 내 모듈의 인터페이스에 영향을 미치므로 너무 많은 코드를 작성하기 전에 바로 얻고 싶습니다. 단순히 코드의 작은 부분만으로 프로그램의 효율성을 떨어 뜨릴 수 있습니다. 또한 GHC에 의존 할 수있는 최적화의 종류에 대해 더 잘 알고 싶습니다.
메모와 마찬가지로 '이저'값이나 이에 상응하는 것이지만 의미가 더 좋은 경우 (예 : '데이터 변경 상태 a = 같은 a | 변경됨 a')가 더 좋은 경우입니다. – Chuck
나쁜 생각은 아닙니다. – Steve