簡體   English   中英

如何在數據類型中存儲多態函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM