2012-07-08 19 views
5

Estoy tratando de entender lo que el siguiente tipo de sinónimo de Yesod está haciendo.Haskell tipo sinónimo

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

no pude encontrar un ejemplo en el que aprender un poco de Haskell o la wikilibro Haskell de un sinónimo de tipo con -> presente. Cualquier enlace o explicación son muy apreciados. Gracias.

+9

Es solo un sinónimo de un tipo de función. –

+3

Donde quiera que vea 'HtmlUrlI18n msg url', reemplace eso con' Translate msg -> Render url -> Html'. – sdcvvc

+0

Para agregar a lo que dijo el gato: Está hecho porque la firma del tipo de mano derecha es un poco difícil de manejar, y tal vez sea difícil de recordar. Supongamos que tiene una función que toma 'Translate msg -> Render url -> Html' como uno de muchos argumentos. Eso rápidamente se vuelve ilegible y tal vez poco claro, mientras que hacer que tome una 'HtmlUrlI18n msg url' es mucho mejor. – gspr

Respuesta

4

Es simplemente un sinónimo de un tipo de función (largo de anotar). Por ejemplo, lo siguiente debe ser válido 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

Muchas gracias a todos por sus respuestas. Muy útil. – David

+0

@David: no olvide marcar una respuesta como aceptada, por lo que la pregunta deja la pestaña sin respuesta. También puede escribir una respuesta propia si lo desea. – hugomg

+0

Gracias. He hecho eso. – David