2012-07-08 18 views
5

Próbuję zrozumieć, co robi następujący synonim typu Yesod.Synonim typu Haskell

type HtmlUrlI18n msg url = Translate msg -> Render url -> Html

nie mogę znaleźć przykład w uczyć ci Haskell lub Wikibook Haskell do typu synonim z -> obecnej. Wszelkie linki lub objaśnienia są mile widziane. Dzięki.

+9

To tylko synonim dla typu funkcji. –

+3

Wszędzie, gdzie widzisz 'HtmlUrlI18n msg url', zamień go na' Translate msg -> Render url -> Html'. – sdcvvc

+0

Aby dodać do tego, co powiedział kot: To się dzieje, ponieważ podpis prawej ręki jest trochę nieporęczny i być może trudny do zapamiętania. Załóżmy, że masz funkcję, która przyjmuje jeden z wielu argumentów: "Translate msg -> Render url -> Html'. To szybko staje się nieczytelne i być może niejasne, podczas gdy posiadanie adresu URL "HtmlUrlI18n msg" jest znacznie lepsze. – gspr

Odpowiedz

4

To tylko synonim typu funkcji (należy długo zanotować). Na przykład poniższe powinny być ważne Haskell

--Example of a function type synonym 
type StrFn = String -> String 

foo :: StrFn 
foo s = s ++ "!" 

--Example of a function type synonym with type parameters 
type Fn a = a -> a 

bar :: Fn String 
bar s = s ++ "?" 
+0

Dziękuję wszystkim za odpowiedzi. Bardzo pomocne. – David

+0

@David: Nie zapomnij oznaczyć odpowiedzi jako zaakceptowanej, więc pytanie pozostawia niezawartą kartę. Możesz także napisać własną odpowiedź, jeśli chcesz. – hugomg

+0

Dzięki. To zrobiłem. – David

Powiązane problemy