อะไรสัญลักษณ์`!`หมายถึงในประเภท declarations ในภาษา haskelllanguage?

0

คำถาม

ฉันศึกษาของภาษา haskelllanguage ฉันเห็นสัญลักษณ์ ! เคยอยู่ในประเภท declarations. เห็นเป็นตัวอย่าง:

data Foo = MkFoo
  { _bar :: !Bar
    , ...
  }

คำถามคือ:ทำไมมันใช้แล้วอะไรคือความแตกต่างกันการประกาศโดยปราศจากมันหรอ?

1

คำตอบที่ดีที่สุด

7

ช่องข้อมูลจำนวนกับเครื่องหมายตกประเด็นคือให้เข้มงวดที่เว็บไซต์ของโปรแกรมของที่เกี่ยวข้อง constructor. สำหรับตัวอย่างเช่นข้อมูลของคุณปล่อยให้เธอได้หายใจอยู่อีจะเป็นเหมือนไม่มี ! แต่การเขียนตามแบบของสิ่งทุกที่ที่คุณใช้รหัส MkFoo:

bar `seq` MkFoo { _bar = bar }

เต็มไปด้วยละเอียดเป็น อยู่ในรายงาน.

2021-11-23 16:20:42

มันคุ้มที่จะ noting นั่นหลักเหตุผลที่ทำให้ช่องข้อมูลเข้มงวดเป็นปกติแล้วที่ นี้จะทำให้คอมไพเลอร์ต้อง unbox ที่เก็บค่า,i.e. แทนที่จะจัดเก็บเป็น pointer ต้องเป็น thunk/ค่า(ซึ่งในกรณีของ e.g. Int กินเวลามากกว่าอวกาศเปนเหมือนค่าตัวมันเอง!), คุณเก็บจำนวนเต็มตรงนั้นอยู่ที่นี่
leftaroundabout

Semantically ใช่ Operationally ไม่นะ ที่คอมไพเลอร์รู้ว่าเป็นเคร่งครัดเรื่องสนามแล้วประเมินผลดดยใคร. คิดว่าคุณเขียน data Grump = Grump !Bar !Char แล้ว goom :: Foo -> (Grump, Int); goom (Foo b) = (Grump b 't', 7). ตอนที่ผลลัพธ์ที่ได้จับคู่เป็นบังคับเรื่องนี้มันจะสร้างผลคู่ทั้งหมดออกจาก constructors และ primitives. ถ้าอย่างไรก็ตาม Foo's สนามเป็นคนขี้เกียจแล้วบังคับให้ผลลัพธ์ที่ได้จับคู่คนที่เป็น thunk ในครั้งแรกส่วนประกอบนั่นตอนที่ถูกบังคับจะบังคับให้ Bar และสร้าง Grump. เข้มงวดช่องข้อมูลจะช่วยได้มากจริงๆสำหรับการตัดลงอย่างต่อเนื่องปัจจัย.
dfeuer

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่