ฉันศึกษาของภาษา haskelllanguage ฉันเห็นสัญลักษณ์ !
เคยอยู่ในประเภท declarations. เห็นเป็นตัวอย่าง:
data Foo = MkFoo
{ _bar :: !Bar
, ...
}
คำถามคือ:ทำไมมันใช้แล้วอะไรคือความแตกต่างกันการประกาศโดยปราศจากมันหรอ?
ฉันศึกษาของภาษา haskelllanguage ฉันเห็นสัญลักษณ์ !
เคยอยู่ในประเภท declarations. เห็นเป็นตัวอย่าง:
data Foo = MkFoo
{ _bar :: !Bar
, ...
}
คำถามคือ:ทำไมมันใช้แล้วอะไรคือความแตกต่างกันการประกาศโดยปราศจากมันหรอ?
ช่องข้อมูลจำนวนกับเครื่องหมายตกประเด็นคือให้เข้มงวดที่เว็บไซต์ของโปรแกรมของที่เกี่ยวข้อง constructor. สำหรับตัวอย่างเช่นข้อมูลของคุณปล่อยให้เธอได้หายใจอยู่อีจะเป็นเหมือนไม่มี !
แต่การเขียนตามแบบของสิ่งทุกที่ที่คุณใช้รหัส MkFoo
:
bar `seq` MkFoo { _bar = bar }
เต็มไปด้วยละเอียดเป็น อยู่ในรายงาน.
data Grump = Grump !Bar !Char
แล้ว goom :: Foo -> (Grump, Int); goom (Foo b) = (Grump b 't', 7)
. ตอนที่ผลลัพธ์ที่ได้จับคู่เป็นบังคับเรื่องนี้มันจะสร้างผลคู่ทั้งหมดออกจาก constructors และ primitives. ถ้าอย่างไรก็ตาม Foo
's สนามเป็นคนขี้เกียจแล้วบังคับให้ผลลัพธ์ที่ได้จับคู่คนที่เป็น thunk ในครั้งแรกส่วนประกอบนั่นตอนที่ถูกบังคับจะบังคับให้ Bar
และสร้าง Grump
. เข้มงวดช่องข้อมูลจะช่วยได้มากจริงๆสำหรับการตัดลงอย่างต่อเนื่องปัจจัย.
Int
กินเวลามากกว่าอวกาศเปนเหมือนค่าตัวมันเอง!), คุณเก็บจำนวนเต็มตรงนั้นอยู่ที่นี่