के संबंध में ज्ञात नाट को दो अस्तित्व में नहीं हटा सका मैं अकेले सिंगल लाइब्रेरी के साथ प्रयोग कर रहा था और मुझे एक ऐसा मामला मिला जो मुझे समझ में नहीं आया।सिंगलनेट लाइब्रेरी
{-# LANGUAGE GADTs, StandaloneDeriving, RankNTypes, ScopedTypeVariables,
FlexibleInstances, KindSignatures, DataKinds, StandaloneDeriving #-}
import Data.Singletons.Prelude
import Data.Singletons.TypeLits
data Foo (a :: Nat) where
Foo :: Foo a
deriving Show
data Thing where
Thing :: KnownNat a => Foo a -> Thing
deriving instance Show Thing
afoo1 :: Foo 1
afoo1 = Foo
afoo2 :: Foo 2
afoo2 = Foo
athing :: Thing
athing = Thing afoo1
foolen :: forall n. KnownNat n => Foo n -> Integer
foolen foo =
case sing of (SNat :: Sing n) -> natVal (Proxy :: Proxy n)
minfoo :: forall a b c. (Min a b ~ c, KnownNat c) => Foo a -> Foo b -> Integer
minfoo _ _ =
let c = case sing of (SNat :: Sing c) -> natVal (Proxy :: Proxy c)
in natVal (Proxy :: Proxy c)
thinglen :: Thing -> Integer
thinglen (Thing foo) = foolen foo
मैं इस दो चीजें
minthing :: Thing -> Thing -> Integer
minthing (Thing foo1) (Thing foo2) = min (foolen foo1) (foolen foo2)
की न्यूनतम प्राप्त करने के लिए इस्तेमाल कर सकते हैं लेकिन मैं सिर्फ यह नहीं कर सकता?
minthing' :: Thing -> Thing -> Integer
minthing' (Thing foo1) (Thing foo2) = minfoo foo1 foo2
• Could not deduce (KnownNat
(Data.Singletons.Prelude.Ord.Case_1627967386
a
a1
(Data.Singletons.Prelude.Ord.Case_1627967254
a a1 (GHC.TypeLits.CmpNat a a1))))
यह मानना है कि मैंने इसके साथ बहुत कुछ नहीं किया है, लेकिन ऐसा लगता है कि आप 'minfoo' में 'ज्ञात नहीं, ज्ञात नॉट बी) गायब हैं। – Cubic