2016-11-21 5 views
2

Benjamin Hodgsonのおかげで、タイプセーフなSQLインターフェイスを実装し始めました。this stackoverflow question。"Singletons Paper"を最新にする。シングルトンライブラリを使用してACharデータ型を実装する方法

アドバイスとして、私はthe singleton paperを読み始めました。私は働くコードが多くを助け、供給されたcodeの仕事を見ることを試みたことが分る。ただし、コードは3歳で、更新が必要です。すばらしいです!今私は何かを学ぶ。ここではステップ1で、タイプリテラル文字列でプロモートタイプACharを削除します。元のコードから

{-# OPTIONS_GHC -fwarn-incomplete-patterns #-} 
{-# Language PolyKinds, DataKinds, TemplateHaskell, TypeFamilies, 
    GADTs, TypeOperators, RankNTypes, FlexibleContexts, UndecidableInstances, 
    FlexibleInstances, ScopedTypeVariables, MultiParamTypeClasses #-} 

module DatabaseStar where 

import Data.Singletons 
import Data.Singletons.CustomStar 
import Data.Singletons.TH 

$(singletons [d| 
-- A re-definition of Char as an algebraic data type. 
-- This is necessary to allow for promotion and type-level Strings. 
    data AChar = CA | CB | CC | CD | CE | CF | CG | CH | CI 
      | CJ | CK | CL | CM | CN | CO | CP | CQ | CR 
      | CS | CT | CU | CV | CW | CX | CY | CZ 
      deriving (Read, Show, Eq) 

-- A named attribute in our database 
    data Attribute a = Attr [AChar] a 

-- A schema is an ordered list of named attributes 
    data Schema a = Sch [Attribute a] 
    |] 

singletons-examples/DatabaseStar.hsに私は満足のいかないことACharを発見し、すぐにそれはもはや必要だった実現しません。

しかし、この使用例では、タイプレベルStringsを実装する方法がわかりません。誰かが私に調査のためのリンクやヒントを提供することができますか?

答えて

6

タイプレベルの「文字列」はすでに存在していますが、名前はSymbolです。

ghci> :set +t -XTypeInType 
ghci> import GHC.TypeLits 
ghci> import Data.Proxy 
ghci> Proxy :: Proxy "I'm a type level string!" 
Proxy 
it :: Proxy "I'm a type level string!" 

つまり、私はsingletonはまだこれらではうまくいきません。問題は文字列のような振る舞いがないことです(文字の抽出や文字列の作成など)。私は、最高の解決策は依然として再宣告文字の醜いものだと信じています。

関連する問題