私は型(Aと呼ぶ)を持っていて、A型 - > A型 - > A型の関数の型定義をしたい。 - > A、A - > A - > A - > ...などこれは動作しません:Haskell - A型のすべての関数 - > A - > ... - > A
{-# LANGUAGE FlexibleInstances #-}
data A = A
class AsToA a where
takeA :: AsToA b => a -> A -> Either A b
instance AsToA (A -> A) where
takeA f a = Left (f a)
instance AsToA b => AsToA (A -> b) where
takeA f a = Right (f a)
私は、次のエラーメッセージが出ます:
AsToA.hs:12:22:
Couldn't match expected type ‘b1’ with actual type ‘b’
‘b’ is a rigid type variable bound by
the instance declaration at AsToA.hs:11:10
‘b1’ is a rigid type variable bound by
the type signature for
takeA :: AsToA b1 => (A -> b) -> A -> Either A b1
at AsToA.hs:12:3
Relevant bindings include
f :: A -> b (bound at AsToA.hs:12:9)
takeA :: (A -> b) -> A -> Either A b1 (bound at AsToA.hs:12:3)
In the first argument of ‘Right’, namely ‘(f a)’
In the expression: Right (f a)
任意のアイデア?何かアドバイスをありがとうございました。 2つのb
sの間にいくつかの混乱がある
私はtakeA'が暗黙的存在量化された 'からだと90%確信しています。 –