考慮下面的代碼: data (:+:) f g a = Inl (f a) | Inr (g a)
data A
data B
data Foo l where
Foo :: Foo A
data Bar l where
Bar :: Bar B
type Sig = Foo :+: Bar
fun :: Sig B -> Int
fun (Inr Ba
假設我正在編寫DSL並希望支持幻像類型支持和嚴重類型表達式。我的值類型可能是 {-# LANGUAGE GADTs, DataKinds #-}
data Ty = Num | Bool deriving (Typeable)
data Val a where
VNum :: Int -> Val Num
VBool :: Bool -> Val Bool
,我可以
在Haskell,其直白地創建一個數據類型遞歸樹,像我們用XML文件有: data XML =
Text String -- Text of text node
| Elem String [XML] -- Tagname; Child nodes
及其相關褶皺: -- Simple fold (Child trees don't see the surrounding
假設我有以下代碼: {-# LANGUAGE GADTs, DeriveDataTypeable, StandaloneDeriving #-}
import Data.Typeable
class Eq t => OnlyEq t
class (Eq t, Typeable t) => BothEqAndTypeable t
data Wrapper a where
Wra
對不起,可怕的標題。我正在嘗試爲Monad包裝一個類型爲Monoid的Applicative實例。 instance (Monad m, Monoid o) => Applicative (m o) where
pure x = return mempty
xm <*> ym = do
x <- xm
y <- ym
return $ x `
這似乎是一個合理的想要的,但我有類型的麻煩。我想有一個Client,可以發送的選項爲Server名單,這將選擇一個,並返回所選定的元素。因此,像這樣: module Toy where
import Pipes
asker :: Monad m =>() -> Client ([a], a -> String) a m()
asker() = do
_ <- request (
我們可以將沒有給定約束條件的GADT轉換爲具有上述約束條件的GADT嗎?我想這樣做是因爲我想深入嵌入箭頭,並用(現在)似乎需要Typeable的表示來做一些有趣的事情。 (One reason) data DSL a b where
Id :: DSL a a
Comp :: DSL b c -> DSL a b -> DSL a c
-- Other constru
我正在測試一些代碼,用於我正在做的一個小實驗,但在一開始我就碰到了一個我看不到如何修復的障礙。 data DatabaseDriver a b where
DatabaseDriver :: (Table table, Field field) => {
dbInsert :: table -> [field] -> String
, dbSelect :: tab