간단히하기 위해 목록을 가져 와서 배열과 목록을 만드는 재귀 함수를 만들려고합니다. 때문에 배열을 읽고 쓸 필요가 있기 때문에, 나는 일정한 시간을 읽고 쓸 수 있도록 변경할 수있는 배열을 사용하고있다. 다중 배열과리스트를 반환하는 재귀 함수
f :: [a] -> ST s ([a], STArray s Int a) -> ST s ([a], STArray s Int a)
f (x:xs) curr_arr =
case blah of
... -> f xs new_arr
f [] curr_arr = curr_arr
나는 다음과 같은 서명 기능
h
를 원하는 : 그래서 다음과 같이 서명과 기능이 무엇인가를 보이는
h :: Int -> Int -> a -> [a] -> (Array Int a, [a])
그리고 나는 그것이 대략 다음과 같은 구현하고 싶지 :
h lbound ubound default_a xs = g (f xs (newArray lbound ubound default_a))
을
문제는이 서명이있는 g
함수가 필요합니다.
ST s ([a], STArray s Int a) -> (Array Int a, [a])
하지만이를 달성하기 위해 함께 해킹 할 수는 없습니다. runST
및 runSTArray
어쨌든 g
을 구현해야합니까, 아니면 f
의 서명을 처음부터 완전히 다르게해야합니까?