2
このプログラムには、インターフェイスIPointと、インターフェイスの動作を実装するファンクションポイント(C++のクラスとして機能する)があります。私は関数ポイントがIPointを実装していると宣言するために多くの方法を試しましたが、そうすることはできませんでした。OO Haskellでのインターフェイスの実装
{-# LANGUAGE EmptyDataDecls, TypeOperators, FlexibleContexts, FlexibleInstances,UndecidableInstances, MultiParamTypeClasses, ScopedTypeVariables, DeriveDataTypeable, TemplateHaskell #-}
{-# OPTIONS_GHC -fcontext-stack=100 #-}
module Point where
import OOHaskell
$(label "read'")
$(label "load")
$(label "incr")
type IPoint a =
Record (Read' :=: IO a
:*: Load :=: (a-> IO())
:*: Incr :=: IO()
:*: HNil)
--point value self = self :: IO (IPoint a)
point value self
= do
valueRef <- newIORef value :: IO (IORef Integer)
returnIO $
read' .=. readIORef valueRef
.*. load .=. (\v -> writeIORef valueRef v)
.*. incr .=. modifyIORef valueRef (+1)
.*. emptyRecord
どのように機能点がIPointを実装するかを指定できますか?