我一直在嘗試創建一類'可嚴格限制'類型。是的原因是,我想定義是這樣的:Haskell:定義嚴格的數據
foldl'' f z = foldl' f (make_strict z)
所以當fold''
上一個strictable
類型使用,也不會有未評估的thunk。
所以我已經開始與以下:
{-# LANGUAGE TypeFamilies #-}
class Strictable a where
type Strict a :: *
make_strict :: a -> Strict a
定義實例以Int
S和Float
s是容易的,foldl'
正常工作與這些了,所以沒有什麼可以做。
instance Strictable Int where
type Strict Int = Int
make_strict = id
instance Strictable Float where
type Strict Float = Float
make_strict = id
這是棘手的部分。 foldl'
只展開最外層的構造函數,因此例如對於一對,仍然可以使用foldl'
獲得空間泄漏。我想從一對普通的對中創建一個嚴格的對。所以我試過這個:
不幸的是我有一堆編譯錯誤。我應該如何實現這一點?
是的,他的嚴格類型類基本上是[Haskell 1.2的'Eval'類](http://www.haskell.org/definition/from12to13.html#strict) - 並且par策略與。 –