Hi Michael, Yes, that does compile!
Much less ugly and does not expose the internal bits of MyStruct. Thanks. Kevin On Sep 26, 2:26 pm, Michael Snoyman <[email protected]> wrote: > How about > > f myS@(MyStruct { myField = value }) > > ? > > > > On Sun, Sep 26, 2010 at 2:14 PM, Kevin Jardine <[email protected]> wrote: > > OK, I have a solution. Ugly, but it compiles. > > > MyStruct actually has quite a few fields but I only need to access the > > polymorphic field 4 times. > > > So for the functions that needed that I wrote: > > > f myS@(MyStruct value _ _ _ ) > > > and then could use value. I could then use the usual record accessors > > on myS to get the other (non-polymorphic) data. > > > I guess that is what GHC was hinting at when it suggested pattern > > matching. > > > That is, pattern matching could extract a value that no functions are > > apparently allowed to touch. > > > All head spinning to me. > > > Thanks for the (as always) fast and useful advice! > > > Kevin > > > On Sep 26, 2:00 pm, Kevin Jardine <[email protected]> wrote: > >> OK, thanks for this advice. > > >> The type definition compiles, but when I try to actually access > >> myField, the compiler says: > > >> Cannot use record selector `myField' as a function due to escaped type > >> variables > >> Probable fix: use pattern-matching syntax instead > > >> So I took the hint and wrote a new pattern matching accessor function: > > >> getMyField (MyStruct value) = value > > >> and I get: > > >> Inferred type is less polymorphic than expected > >> Quantified type variable `a' escapes > >> When checking an existential match that binds > >> value :: a > > >> Any further suggestions? > > >> On Sep 26, 1:09 pm, Daniel Fischer <[email protected]> wrote:> On > >> Sunday 26 September 2010 12:53:46, Michael Snoyman wrote: > > >> > > data MyStruct = forall a. MyTypeClass a => MyStruct {myField :: a} > > >> > Note that that requires > >> > {-# LANGUAGE ExistentialQuantification #-} > >> > _______________________________________________ > >> > Haskell-Cafe mailing list > >> > [email protected]http://www.haskell.org/mailman/listinfo/haskell-cafe > > >> _______________________________________________ > >> Haskell-Cafe mailing list > >> [email protected]http://www.haskell.org/mailman/listinfo/haskell-cafe > > _______________________________________________ > > Haskell-Cafe mailing list > > [email protected] > >http://www.haskell.org/mailman/listinfo/haskell-cafe > > _______________________________________________ > Haskell-Cafe mailing list > [email protected]http://www.haskell.org/mailman/listinfo/haskell-cafe _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
