2012-12-27 4 views
0

하우스를 NHouse로 변환하는 함수를 만들어야합니다. 나는 다음 NRoof 각 지붕을 변환 보조 기능을하고 그 일을 생각하고 한하스켈 대수 타입과 함수 변환

data House = House { hworking :: Working, hfinished :: Finished} 

type Working = [Roof] , type Finished = [Roof] 

data NHouse = NHouse {rot :: [NRoof]} 

data NRoof = NRoof {h :: Roof, st :: Status } 

data Status = Working | Finished 

는 aply 집의 모든 지붕에 그.

하지만 난 그걸 알아낼 수 없습니다. 나는 다음과 같이하고있다.

nWorking :: Roof -> NRoof 
nWorking x = NRoof {x, Working } 
+1

과 같이 쓸 수있다. (경매 무엇입니까?) – Satvik

답변

1

예. 올바른 방향으로 가고있다. 상태가 주어진 RoofNRoof으로 변환하는 기능을 만들 수 있습니다.

transform :: Status -> Roof -> NRoof 
transform s r = NRoof r s 

그러면 집에있는 지붕 목록에이 기능을 매핑 할 수 있습니다.

h2n :: House -> NHouse 
h2n (House w f) = NHouse $ 
       map (transform Working) w ++ 
       map (transform Finished) f 

은 한 줄 이것은 다른 사람이 읽을 전에 질문을 읽어

h2n (House w f) = NHouse $ map (flip NRoof Working) w ++ map (flip NRoof Finished) f