2012-12-27 73 views
0

我必須創建一個函數將House轉換爲NHouse。Haskell代數類型和函數轉換

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 

我想過這樣做使該將每個屋頂在NRoof輔助功能,然後APLY,爲家中的每個屋頂。

但我只是無法弄清楚。我正在做這樣的事情:

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

看了你的問題別人看了他們。(什麼是拍賣?) – Satvik

回答

1

是的,你正朝着正確的方向前進。給定狀態,您可以創建一個函數將Roof轉換爲NRoof

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