videos son sinónimos sinonimos para niños los jugando cuáles cual aprender antónimos antonimos haskell ghci type-families

haskell - son - Expandir sinónimos de tipo, familias de tipo con GHCi



videos de sinonimos y antonimos (1)

:kind! lo haré:

λ> :kind! T (S B A) T (S B A) :: * = H (F (H (F B) (G A))) (G (H B (H (F B) (G A)))) λ> :kind! R (T (S B A)) R (T (S B A)) :: * = H (G (H B (H (F B) (G A)))) (F (H (F B) (G A)))

(Para su comodidad, puede poner algo como :def k! /x -> return (":kind! " ++ x) en su .ghci .)

Me pregunto si hay una funcionalidad que exista dentro de GHCi (o en otra parte) para expandir los sinónimos y familias de tipo de una expresión de tipo arbitraria.

Por ejemplo, si tengo estos tipos,

data A = A data B = B data F a = F a data G a = G a data H a b = H a b type S a b = H (F a) (G b) type T a = S (a) (H B a) type family R a :: * type instance R (H a b) = H b a

entonces me gustaría poder obtener este tipo de salida en una sesión de ghci.

> :t undefined :: T (S B A) undefined :: T (S B A) :: T (S B A) > :texpand undefined :: T (S B A) undefined :: T (S B A) :: H (F ((H (F B) (G A)))) (G (H B (H (F B) (G A)))) > :texpand undefined :: R (T (S B A)) undefined :: R (T (S B A)) :: H (G (H B (H (F B) (G A)))) (F ((H (F B) (G A))))

Por lo que puedo decir, GHCi en realidad no proporciona nada como un comando :texpand , y no estoy seguro de que sea la mejor interfaz para esa información. Sin embargo, parece probable que los tipos expandidos se puedan extraer de GHC de alguna manera, y realmente me gustaría poder verlos interactivamente.

Hacks, enlaces de documentación, discusiones especulativas sobre futuras adiciones a GHCi, todos bienvenidos.