문제

썼 기능켈에는 몇 가지 매개 변수를 다음과 같 word32 를 갖습,문자열(무시한 변환)및 출력이 IO word32 를 갖습니다.이 기능 진정한 의미에서: 에 대한 동일한 입력,출력은 항상 동.없는 부작용이 나타납니다.이유는 기능을 반환 IO word32 를 갖습는 대신 word32 를 갖습는 기능 업데이트 많은 32 비트 선형 피드백 시프트 레지스터(lfsr)및 다른 레지스터에 여러 번 반복를 계산하기 위해서 최종 word32 를 갖습 output.

나의 질문은 이것입니다:주어지는 이 기능 을 효과적으로는 부작용이 없, 하는 것이 가능한 숨기기 사람들을 등록한 업데이트 내의 기능을 구현하도록 기능을 반환 word32 를 갖습과하지 않 IO word32 를 갖습?그렇다면,어떻게 합니까?

도움이 되었습니까?

해결책

예!켈 이것을 할 수 있습니다.

ST 일

만약 당신이 실제로 사용하여 변경 가능한 상태(등록),이는 전적으로 숨겨진 관찰자에서 외부의 함수,다음 당신에 ST 일,슷하지만 데이터베이스를 메모리에 대한 효과만 있습니다.를 입력 세인트를 통해 세계 runST, 할 때 함수를 종료하는 방법을 보여줍니다,모든 효과를 보장하는 표시 되지 않습니다.

그것이 정확하게 권한 계산 환경에 대한 현지,변경 가능한 상태입니다.

순수 기능 상태:상태다.

는 경우,그러나,당신이 실제로 변화시키는 레지스터 또는 세포이지만,오히려 업데이트하는 순전히 기능적인 값을 많은 시간은,단순한 환경에 사용할 수 있습니다: 상태다..이것을 허용하지 않 변경 가능한 상태,그러나는 환상의 상태에 있습니다.

IO 및 unsafePerformIO

마지막으로 있는 경우,로컬,변경 가능한 효과처럼에서 ST 되었지만,일부 또는 다른 이유로,당신은 필요 IO 작업에서는 상태(등을 통해 FFI call),시뮬레이션할 수 있습니다 ST 일과 함께,거의 많은 안전을 사용하여, unsafePerformIO, 대 runST, 를 소개하고,지역 IO 환경입니다.로 IO 사이 있지 않는 좋은 형식을 적용하는 추상화해야 합동으로 확신하는 부작용이 되지 않을 관찰할 수 있어야 합니다.

다른 팁

가져온 경우에는 그 기능을 사용하여 FFI,다만 제거 IO 에서 반환 유형입니다.다른 사용 unsafePerformIO :: IO a -> aSystem.IO.Unsafe.이 기능은 중의 가장 위험한 기능이터베이스를 저장합니다.그것을 사용하지 않는 경우에,당신은 정말 임에 대한 결과입니다.그러나 당신의 목적을 위해,그것은 괜찮은 것 같다.

예, 이것은 정당한 Unsafeperformio의 합법적 인 사용이 될 것입니다. 그러나 눈에 띄는 효과가 없는지 정말로 확신하는 경우에만 괜찮습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top