2017-10-19 6 views
4

、私はこれを有する:私はこの機能を型シグネチャを与えることができないと推測された型シグネチャがcn :: IsString t => EventScans -> tあるシングルトンを持つStringを返す関数を宣伝するにはどうすればよいですか? LTS-9.2(およびシングルトン-2.1)でスタックを使用

$(singletons [d| 
     data EventScans 
     = PassThrough 
     | SuiteProgress 

     -- cn :: EventScans -> [Char] 
     cn PassThrough = "all-events" 
     cn SuiteProgress = "suite-progress" 
    |]) 

を。 AFAIK IsStringは、単一化しません。

cnにタイプシグネチャがないと、期待通りにCnタイプのファミリーが得られます。タイプシグネチャを追加しようとすると、次のようになります。

* Expected kind `[Char]', but `"all-events"' has kind `Symbol' 
* In the type `"all-events"' 
    In the type family declaration for `Cn' (haskell-stack-ghc) 

これは正しい方法はありますか?

編集私は型シグネチャcn :: IsString t => EventScans -> tを含めるようにしようと、私は次のエラーを取得する:

Variable `a_agPb' used as both a kind and a type 
Did you intend to use TypeInType? (haskell-stack-ghc) 
Not in scope: type constructor or class `SIsString' 
    Perhaps you meant `IsString' (imported from Data.String) (haskell-stack-ghc) 
+0

あなたのやり方は大丈夫です - 'IsString'は' singletons'によってうまく処理されます(少なくとも私にとって - このコードはうまく動作します)。 'OverloadedStrings'が有効になっていない限り、推論された型は' .. - > String'であることに注意してください。単純な戻り型が本当に必要な場合は、このコードをモジュールに入れないでください。または、単に 'cn ':: EventScans - > String; cn '= cn'どこか。 – user2407038

+0

@ user2407038質問を少しはっきりさせるために編集しました。 –

+0

エラーは、-XTypeInTypeを設定するように指示しているようです。それは役に立ちますか? – HTNW

答えて

関連する問題