Dato un certo numero di vincoli typeclass:Come posso scoprire quali tipi (concreti) soddisfano un insieme di vincoli di classe di caratteri?
{-# LANGUAGE ConstraintKinds, MultiParamTypeClasses #-}
import Data.Array.Unboxed(Ix,IArray,UArray)
type IntLike a = (Ord a, Num a, Enum a, Show a, Ix a, IArray UArray a)
Come posso sapere quali tipi soddisfano IntLike
, vale a dire tutti i vincoli di cui congiuntamente?
posso puzzle insieme le informazioni necessarie dall'output del comando di ghci :info
, e quindi ricontrollate il mio lavoro chiamando il numero (o avere ghci TYPECHECK)
isIntLike :: IntLike -> Bool
isIntLike = const True
a vari tipi, per esempio .
C'è un modo per ottenere ghci per fare questo per me?
Attualmente mi interessano i tipi concreti, ma non mi dispiacerebbe avere una soluzione più generale che faccia anche cose intelligenti con contesti unificanti!
È possibile farlo utilizzando il modello haskell: 'main = print $ (reify '' Show >> = stringE. Show)'. Questo non funzionerà per i sinonimi di tipo - piuttosto, reify restituisce l'AST che rappresenta il sinonimo di tipo stesso, senza espanderlo. Puoi controllare i sinonimi di tipo che sono vincoli, estrarre i vincoli di cui quel sinonimo di tipo consiste e continuare a reimpostarli. – user2407038
Esatto, sembra che contenga tutte le informazioni necessarie per prendere l'incrocio, grazie! Sarò quello che posso sferzare, ma devo dire che hacking GHCi sembra quasi più pratico :-) – yatima2975
@ user2407038 puoi trasformare quel commento in una risposta come ho dovuto rispondere alla qeustion? – sclv