2012-09-24 5 views
5

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?

+2

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! –

+1

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 ... –

Odpowiedz

2

Ok, rozumiem przez niektóre monkeying o:

description :: SingI d => Temp d a -> Sing d 

Wygląda istnieje jakiś ostry przepisywanie dzieje, ale wystarczająco dobry na teraz.

Powiązane problemy