Is it ever possible to detect sharing in Haskell?

后端 未结 3 1999
说谎
说谎 2020-12-03 17:56

In Scheme, the primitive eq? tests whether its arguments are the same object. For example, in the following list

(define lst
  (let (x (list \'a         


        
3条回答
  •  既然无缘
    2020-12-03 18:33

    It is not possible in Haskell, the pure language.

    But in its implementation in GHC, there are loopholes, such as

    • the use of reallyUnsafePtrEquality# or
    • introspection libraries like ghc-heap-view.

    In any case, using this in regular code would be very unidiomatic; at most I could imagine that building a highly specialized library for something (memoizatoin, hash tables, whatever) that then provides a sane, pure API, might be acceptable.

提交回复
热议问题