[英]How to store a polymorphic function in a data type
我有一個data
類型,我想在其中存儲一個函數: State Foo a -> a
。 據推測,當創建此類型的實例時,程序將部分應用具有計算初始狀態的evalState
,並將結果函數存儲在數據結構中。 稍后,可以從實例檢索該函數,並用於評估State
monad中的一個或多個計算並獲得結果。
-- This doesn't work
data Bar = Bar {
-- other members here
runWithState :: State Foo a -> a
}
==> Not in scope: type variable 'a'
我不能更具體,因為我不知道計算的最終結果是什么,它可能會根據計算產生的結果而改變。
如何使類型檢查器與此一起工作?
使用具有RankNTypes
擴展名的forall
:
{-# LANGUAGE RankNTypes #-}
import Control.Monad.State
type Foo = String
data Bar = Bar {
-- other members here
runWithState :: forall a. State Foo a -> a
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.