Próbuję odzyskać Symbol
używany w rodzaju wartości:Nie można użyć typu podpis ghci-wnioskować o funkcji powrocie Śpiewaj (d :: Symbol)
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Temp where
import GHC.TypeLits
data Temp (d :: Symbol) (a :: *) where
T :: a -> Temp d a
{-
description :: SingI Symbol d => Temp d a -> Sing Symbol d
-}
description (_ :: Temp d a) = (sing :: Sing d)
Ten ładuje grzywny w ghci
(wersja 7.6.1):
% ghci
GHCi, version 7.6.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :l Temp
[1 of 1] Compiling Temp (Temp.hs, interpreted)
Ok, modules loaded: Temp.
*Temp> :t description
description :: SingI Symbol d => Temp d a -> Sing Symbol d
jednak gdy próbuję użyć typu wnioskować na ghci
w samym module (odkomentowanie linię w Temp.hs), pojawia się następujący błąd:
Temp.hs:14:16:
`SingI' is applied to too many type arguments
In the type signature for `description':
description :: SingI Symbol d => Temp d a -> Sing Symbol d
Co ma dla mnie sens, od Sing
and SingI
seem to take a single parameter in the documentation.
Jaki jest poprawny typ podpisu dla description
?
Wygląda jak błąd w ładnej drukarce; Wygląda na to, że nie powinno to być dość drukowane wnioskowane wartości domyślnych argumentów, jeśli nie możesz jawnie podać tych argumentów! –
Obserwowałem ten sam buggy display z 'Nat'. Założę się, że próbował jakoś wydrukować rodzaj podpisu, ale niepoprawne wyświetlanie niejawnego argumentu ma więcej sensu ... –