Slide 1

Slide 1 text

େن໛਺஋ܭࢉΛࢧ͑Δ)BTLFMM
 1SBHNBUJD)BTLFMMJO-BSHF4DBMF /VNFSJDBM$PNQVUBUJPO ੴҪେւʢ%FFQ'MPXגࣜձࣾʣ )BTLFMM%BZ

Slide 2

Slide 2 text

4FMG*OUSPEVDUJPO w ੴҪେւ)JSPNJ*4)** 1I%JO.BUI w 3FTFBSDIFSBOE%FWFMPQFSBU%FFQ'MPX *OD w "DLOPXMFEHFNFOU&EXBSEXBTNZNFOUPS BU(4P$ w .Z1I%5IFTJTJTTPNFLJOEPGB DPOUJOVBUJPOPGNZ(4P$UBTL 5IBOLT

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

w 'PVOEFEJO+VMZ *KPJOFEUIJTTQSJOH

Slide 5

Slide 5 text

w 'PVOEFEJO+VMZ *KPJOFEUIJTTQSJOH w 0VS(PBM(FOFSBM1VSQPTF 6MUSBIJHITQFFE -BSHFTDBMF /VNFSJDBM4PMWFS

Slide 6

Slide 6 text

w 'PVOEFEJO+VMZ *KPJOFEUIJTTQSJOH w 0VS(PBM(FOFSBM1VSQPTF 6MUSBIJHITQFFE -BSHFTDBMF /VNFSJDBM4PMWFS w (FOFSBM1VSQPTF$BOTJNVMBUF"/:QIZTJDBM QIFOPNFOBFYQSFTTFEBT%J⒎FSFOUJBM&RVBUJPOT

Slide 7

Slide 7 text

w 'PVOEFEJO+VMZ *KPJOFEUIJTTQSJOH w 0VS(PBM(FOFSBM1VSQPTF 6MUSBIJHITQFFE -BSHFTDBMF /VNFSJDBM4PMWFS w (FOFSBM1VSQPTF$BOTJNVMBUF"/:QIZTJDBM QIFOPNFOBFYQSFTTFEBT%J⒎FSFOUJBM&RVBUJPOT w 4QFFE4DBMF#JMMJPODFMMTºWBMTº.4UFQT
 #GSFFEPNº.JMMJPO4UFQT

Slide 8

Slide 8 text

w 'PVOEFEJO+VMZ *KPJOFEUIJTTQSJOH w 0VS(PBM(FOFSBM1VSQPTF 6MUSBIJHITQFFE -BSHFTDBMF /VNFSJDBM4PMWFS w (FOFSBM1VSQPTF$BOTJNVMBUF"/:QIZTJDBM QIFOPNFOBFYQSFTTFEBT%J⒎FSFOUJBM&RVBUJPOT w 4QFFE4DBMF#JMMJPODFMMTºWBMTº.4UFQT
 #GSFFEPNº.JMMJPO4UFQT w 0VSTPMWFSJTDVSSFOUMZXSJUUFOJO -JOFTPG)BTLFMM BOEDPOTJTUTPGQBDLBHFT

Slide 9

Slide 9 text

"HHSFTTJWF6TFPG()$

Slide 10

Slide 10 text

"HHSFTTJWF6TFPG()$ 5PUBM.PEVMFT &YUFOTJPOT 0O()$

Slide 11

Slide 11 text

"HHSFTTJWF6TFPG()$ TypeApplications FlexibleContexts MPTC DataKinds TypeFamilies ScopedTypeVariables FlexibleInstances TypeOperators UndecidableInstances DerivingStrategies OverloadedStrings PolyKinds TemplateHaskell RecordWildCards GND 0 50 100 150 200 5PUBM.PEVMFT &YUFOTJPOT 0O()$

Slide 12

Slide 12 text

"HHSFTTJWF6TFPG()$ TypeApplications FlexibleContexts MPTC DataKinds TypeFamilies ScopedTypeVariables FlexibleInstances TypeOperators UndecidableInstances DerivingStrategies OverloadedStrings PolyKinds TemplateHaskell RecordWildCards GND 0 50 100 150 200 5PUBM.PEVMFT &YUFOTJPOT 0O()$ 8FBSFVTJOHGFBUVSFTJOUSPEVDFEJO
 QuantifiedConstraints, DerivingVia, Source Plugins

Slide 13

Slide 13 text

)PX$BO)BTLFMM)FMQUP "DIJFWF5IFTF(PBMT

Slide 14

Slide 14 text

0VS(PBMTBOE)BTLFMM w (FOFSBM1VSQPTF4PMWFS w %FQFOEFOU)BTLFMM w 5BHMFTT'JOBMBOE*OJUJBM4UZMF w 4QFFEBOE4DBMF w 1SJNJUJWF.POBET 3FXSJUJOH3VMFT 4QFDJBMJTBUJPO *OUFSQSPDFTT DPNNVOJDBUJPO w .POBEJD4FRVFODF"CTUSBDUJPOUPNBLFVTFPGUIFTF w 1MVHJOTVTJOH&YUFOTJCMF3FDPSET w "OENBOZPUIFSUFDIOJRVFTOPUNFOUJPOFEUIJTUBML &YQSFTTJWJUZ4BGFUZ .PEVMBSJUZ &YUFOTJCJMJUZ

Slide 15

Slide 15 text

0VS(PBMTBOE)BTLFMM w (FOFSBM1VSQPTF4PMWFS w %FQFOEFOU)BTLFMM w 5BHMFTT'JOBMBOE*OJUJBM4UZMF w 4QFFEBOE4DBMF w 1SJNJUJWF.POBET 3FXSJUJOH3VMFT 4QFDJBMJTBUJPO *OUFSQSPDFTT DPNNVOJDBUJPO w .POBEJD4FRVFODF"CTUSBDUJPOUPNBLFVTFPGUIFTF w 1MVHJOTVTJOH&YUFOTJCMF3FDPSET w "OENBOZPUIFSUFDIOJRVFTOPUNFOUJPOFEUIJTUBML &YQSFTTJWJUZ4BGFUZ

Slide 16

Slide 16 text

&YQSFTTJWJUZBOE4BGFUZ %FQFOEFOU)BTLFMM

Slide 17

Slide 17 text

&YBNQMFT#PVOEBSZ4BOJUZ BOE2VBOUJUZ/BNF

Slide 18

Slide 18 text

&YBNQMFT#PVOEBSZ4BOJUZ BOE2VBOUJUZ/BNF w 8FUSFBUTPNBOZEJ⒎FSFOULJOETPGRVBOUJUJFT

Slide 19

Slide 19 text

&YBNQMFT#PVOEBSZ4BOJUZ BOE2VBOUJUZ/BNF w 8FUSFBUTPNBOZEJ⒎FSFOULJOETPGRVBOUJUJFT w WFMPDJUZ UFNQFSBUVSF FMFDUSJDDIBSHF

Slide 20

Slide 20 text

&YBNQMFT#PVOEBSZ4BOJUZ BOE2VBOUJUZ/BNF w 8FUSFBUTPNBOZEJ⒎FSFOULJOETPGRVBOUJUJFT w WFMPDJUZ UFNQFSBUVSF FMFDUSJDDIBSHF w 4PNFPGUIFNTIBSFTUIFTBNFSFQSFTFOUBUJPO CVUUIFZ BSFDPNQMFUFMZEJ⒎FSFOURVOBUJUJFT

Slide 21

Slide 21 text

&YBNQMFT#PVOEBSZ4BOJUZ BOE2VBOUJUZ/BNF w 8FUSFBUTPNBOZEJ⒎FSFOULJOETPGRVBOUJUJFT w WFMPDJUZ UFNQFSBUVSF FMFDUSJDDIBSHF w 4PNFPGUIFNTIBSFTUIFTBNFSFQSFTFOUBUJPO CVUUIFZ BSFDPNQMFUFMZEJ⒎FSFOURVOBUJUJFT w "OEUIFZSFRVJSFTEJ⒎FSFOUQSFQSPDFTTJOHPGCPVOEBSZ WBMVFTUPFOGPSDFJOWBSJBOUT

Slide 22

Slide 22 text

&YBNQMFT#PVOEBSZ4BOJUZ BOE2VBOUJUZ/BNF w 8FUSFBUTPNBOZEJ⒎FSFOULJOETPGRVBOUJUJFT w WFMPDJUZ UFNQFSBUVSF FMFDUSJDDIBSHF w 4PNFPGUIFNTIBSFTUIFTBNFSFQSFTFOUBUJPO CVUUIFZ BSFDPNQMFUFMZEJ⒎FSFOURVOBUJUJFT w "OEUIFZSFRVJSFTEJ⒎FSFOUQSFQSPDFTTJOHPGCPVOEBSZ WBMVFTUPFOGPSDFJOWBSJBOUT w 1SPDFTTFEWBMVFTNVTUOPUCFBEEFENVMUJQMJFEXJUIPUIFS WBMVFT CFDBVTFJUDBOWJPMBUFJOWBSJBOUT

Slide 23

Slide 23 text

&YBNQMFT#PVOEBSZ4BOJUZ BOE2VBOUJUZ/BNF w 8FUSFBUTPNBOZEJ⒎FSFOULJOETPGRVBOUJUJFT w WFMPDJUZ UFNQFSBUVSF FMFDUSJDDIBSHF w 4PNFPGUIFNTIBSFTUIFTBNFSFQSFTFOUBUJPO CVUUIFZ BSFDPNQMFUFMZEJ⒎FSFOURVOBUJUJFT w "OEUIFZSFRVJSFTEJ⒎FSFOUQSFQSPDFTTJOHPGCPVOEBSZ WBMVFTUPFOGPSDFJOWBSJBOUT w 1SPDFTTFEWBMVFTNVTUOPUCFBEEFENVMUJQMJFEXJUIPUIFS WBMVFT CFDBVTFJUDBOWJPMBUFJOWBSJBOUT ‎ 4MPHBO)VNBOTGPSHFU-FUUZQFTSFNFNCFS

Slide 24

Slide 24 text

5BHHJOHXJUI2VBOUJUZ/BNFBOE 4BOJUZ w TagQty name s: BRVBOUJUZOBNFEnameXJUIQSPDFTTFETUBUFs. w *OUIJTXBZ BUZQFEFQFOETPOWBMVFTnameBOETBOJUZ :FU%POF B %FQFOEFOU5ZQF w 8FDBOVTF,OPXO/BUMJLFDPOTUSBJOUTUPSFJGZUZQFMFWFMWBMVFTUPFYQSFTTJPO w 4JODFXFXBOUUPBMMPXPQFSBUJPOTPOMZPOYetRVBOUJUJFT XFQSPWJEFNumsPOMZ GPSYets BOEIJEFDPOTUSVDUPSTGSPNPUIFSNPEVMFT w /VNJOTUBODFJTJOEFQPGLBOEOBNF XFDBOKVTUXSJUFBQPMZNPSQIJDJOTUT data Sanity = Yet | Done newtype TagQty name (s  Sanity) = TQty { unTagQty  PhysQty } unproc  TagQty k t 'Done  TagQty t 'Yet class Processable env k name where process  env  PhysQty  TagQty name 'Done instance s ~ 'Yet  Num (TagQty k name s)

Slide 25

Slide 25 text

5ZQFDIFDLFS1MVHJO w 8FBMTPVTFUZQFMFWFMOBUVSBMTUPNBJOUBJOJOHFHEJNFOTJPOT w 1SPCMFN()$DBOOPUTFF GPSOPODPODSFUF WBSJBCMFL w 8FDBOVTFFYJTUJOH5ZQF$IFDLFS1MVHJOTUPUFMM()$UIBUTVDI DPOTUSBJOUTIPME w 8FVTFghc-typelits-natnormalise[4]. w &WFOUIPVHIJUDBOTPMWFFRVBUJPOBMDPOTUSBJOUTPOMZ CVUJUTV⒏DFT BOEJUTFFNTFYUFOTJPOUPOPOFRVBUJPOBMPOFJTOPUTPIBSE . {-# OPTIONS_GHC -fplugin GHC.TypeLits.Normalise #-}
 {-# OPTIONS_GHC -fplugin-opt ( ):allow-negated-numbers #-} (k + 1) − 1 = k

Slide 26

Slide 26 text

4VNNBSZ-FU5ZQFT 3FNFNCFS

Slide 27

Slide 27 text

4VNNBSZ-FU5ZQFT 3FNFNCFS w )VNBOTGPSHFUJOWBSJBOUT-FUUZQFTSFNFNCFS

Slide 28

Slide 28 text

4VNNBSZ-FU5ZQFT 3FNFNCFS w )VNBOTGPSHFUJOWBSJBOUT-FUUZQFTSFNFNCFS w 8JUI%BUB,JOET POFDBOFOGPSDFJOWBSJBOUTTUBUJDBMMZ BUUZQF MFWFM BMMPXTPQFSBUJPOTPOMZPOUIFTBNFEFHT POMZPO VOQSPDFTTFERUZT BOETPPO

Slide 29

Slide 29 text

4VNNBSZ-FU5ZQFT 3FNFNCFS w )VNBOTGPSHFUJOWBSJBOUT-FUUZQFTSFNFNCFS w 8JUI%BUB,JOET POFDBOFOGPSDFJOWBSJBOUTTUBUJDBMMZ BUUZQF MFWFM BMMPXTPQFSBUJPOTPOMZPOUIFTBNFEFHT POMZPO VOQSPDFTTFERUZT BOETPPO w 4VDIQBSBNFUFSTXIJDIEPFTOUPDDVSJOBDUVBMWBMVFJTDBMMFE QIBOUPNUZQFT

Slide 30

Slide 30 text

4VNNBSZ-FU5ZQFT 3FNFNCFS w )VNBOTGPSHFUJOWBSJBOUT-FUUZQFTSFNFNCFS w 8JUI%BUB,JOET POFDBOFOGPSDFJOWBSJBOUTTUBUJDBMMZ BUUZQF MFWFM BMMPXTPQFSBUJPOTPOMZPOUIFTBNFEFHT POMZPO VOQSPDFTTFERUZT BOETPPO w 4VDIQBSBNFUFSTXIJDIEPFTOUPDDVSJOBDUVBMWBMVFJTDBMMFE QIBOUPNUZQFT w ()$JTOPUTPDMFWFSUPTPMWFUSJWJBMDPOTUSBJOUT CVUPOFDBOBVHNFOU UIFNXJUIUZQFDIFDLFSQMVHJOT

Slide 31

Slide 31 text

4VNNBSZ-FU5ZQFT 3FNFNCFS w )VNBOTGPSHFUJOWBSJBOUT-FUUZQFTSFNFNCFS w 8JUI%BUB,JOET POFDBOFOGPSDFJOWBSJBOUTTUBUJDBMMZ BUUZQF MFWFM BMMPXTPQFSBUJPOTPOMZPOUIFTBNFEFHT POMZPO VOQSPDFTTFERUZT BOETPPO w 4VDIQBSBNFUFSTXIJDIEPFTOUPDDVSJOBDUVBMWBMVFJTDBMMFE QIBOUPNUZQFT w ()$JTOPUTPDMFWFSUPTPMWFUSJWJBMDPOTUSBJOUT CVUPOFDBOBVHNFOU UIFNXJUIUZQFDIFDLFSQMVHJOT w /PUFGPS1SPGFTTJPOBMT8FBSFUSZJOHIBSEUPBWPJEUPVTFTJOHMFUPOT

Slide 32

Slide 32 text

0VS(PBMTBOE)BTLFMM w (FOFSBM1VSQPTF4PMWFS w %FQFOEFOU)BTLFMM w 5BHMFTTpOBMBOE*OJUJBM4UZMF w 4QFFEBOE4DBMF w 1SJNJUJWF.POBET 3FXSJUJOH3VMFT 4QFDJBMJTBUJPO *OUFSQSPDFTT DPNNVOJDBUJPO w .POBEJD4FRVFODF"CTUSBDUJPOUPNBLFVTFPGUIFTF w 1MVHJOTVTJOH&YUFOTJCMF3FDPSET w "OENBOZPUIFSUFDIOJRVFTOPUNFOUJPOFEUIJTUBML &YQSFTTJWJUZ4BGFUZ

Slide 33

Slide 33 text

0VS(PBMTBOE)BTLFMM w (FOFSBM1VSQPTF4PMWFS w %FQFOEFOU)BTLFMM w 5BHMFTTpOBMBOE*OJUJBM4UZMF w 4QFFEBOE4DBMF w 1SJNJUJWF.POBET 3FXSJUJOH3VMFT 4QFDJBMJTBUJPO *OUFSQSPDFTT DPNNVOJDBUJPO w .POBEJD4FRVFODF"CTUSBDUJPOUPNBLFVTFPGUIFTF w 1MVHJOTVTJOH&YUFOTJCMF3FDPSET w "OENBOZPUIFSUFDIOJRVFTOPUNFOUJPOFEUIJTUBML .PEVMBSJUZ

Slide 34

Slide 34 text

.PEVMBSJUZ
 5BHMFTTpOBMBOE*OJUJBM 4UZMF

Slide 35

Slide 35 text

$&0T5XFFU

Slide 36

Slide 36 text

$&0T5XFFU 0VSQSPEVDUEFMJNJUTUBTLTCZNPOBET5IJTNBLFTPVS KPCTNPEVMBSBOEPOMZBMJNJUFEBNPVOUPGLOPXMFEHFJT OFFEFEGPSFBDITFQBSBUFBSFBPGUBTL

Slide 37

Slide 37 text

$&0T5XFFU )PX5SVFJTUIJTTUBUFNFOU 0VSQSPEVDUEFMJNJUTUBTLTCZNPOBET5IJTNBLFTPVS KPCTNPEVMBSBOEPOMZBMJNJUFEBNPVOUPGLOPXMFEHFJT OFFEFEGPSFBDITFQBSBUFBSFBPGUBTL

Slide 38

Slide 38 text

.POBEEFMJNJUTUBTLT

Slide 39

Slide 39 text

.POBEEFMJNJUTUBTLT w "GUFSBMNPTUIBMGBOZFBS UIFTUSVDUVSFIBTDIBOHFEUJNFCZUJNF

Slide 40

Slide 40 text

.POBEEFMJNJUTUBTLT w "GUFSBMNPTUIBMGBOZFBS UIFTUSVDUVSFIBTDIBOHFEUJNFCZUJNF w #VUUIFTUBUFNFOUDBOTUJMMIPMEUSVFJOBTFOTF

Slide 41

Slide 41 text

.POBEEFMJNJUTUBTLT w "GUFSBMNPTUIBMGBOZFBS UIFTUSVDUVSFIBTDIBOHFEUJNFCZUJNF w #VUUIFTUBUFNFOUDBOTUJMMIPMEUSVFJOBTFOTF w 5ZQF$MBTTFT GPMMPXJOHUBHMFTTpOBMBQQSPBDI BCTUSBDUT FBDITFQBSBUFUBTLT

Slide 42

Slide 42 text

.POBEEFMJNJUTUBTLT w "GUFSBMNPTUIBMGBOZFBS UIFTUSVDUVSFIBTDIBOHFEUJNFCZUJNF w #VUUIFTUBUFNFOUDBOTUJMMIPMEUSVFJOBTFOTF w 5ZQF$MBTTFT GPMMPXJOHUBHMFTTpOBMBQQSPBDI BCTUSBDUT FBDITFQBSBUFUBTLT w %J⒎FSFOUJBMPQFSBUJPOT DBMDVMBUJPOTDIFNBUB *0

Slide 43

Slide 43 text

.POBEEFMJNJUTUBTLT w "GUFSBMNPTUIBMGBOZFBS UIFTUSVDUVSFIBTDIBOHFEUJNFCZUJNF w #VUUIFTUBUFNFOUDBOTUJMMIPMEUSVFJOBTFOTF w 5ZQF$MBTTFT GPMMPXJOHUBHMFTTpOBMBQQSPBDI BCTUSBDUT FBDITFQBSBUFUBTLT w %J⒎FSFOUJBMPQFSBUJPOT DBMDVMBUJPOTDIFNBUB *0 w &RVBUJPOXSJUFSTIBTUPDBSFBCPVUPOMZBCTUSBDUEJ⒎FSFOUJBM PQFSBUJPOTPOMZ

Slide 44

Slide 44 text

.POBEEFMJNJUTUBTLT w "GUFSBMNPTUIBMGBOZFBS UIFTUSVDUVSFIBTDIBOHFEUJNFCZUJNF w #VUUIFTUBUFNFOUDBOTUJMMIPMEUSVFJOBTFOTF w 5ZQF$MBTTFT GPMMPXJOHUBHMFTTpOBMBQQSPBDI BCTUSBDUT FBDITFQBSBUFUBTLT w %J⒎FSFOUJBMPQFSBUJPOT DBMDVMBUJPOTDIFNBUB *0 w &RVBUJPOXSJUFSTIBTUPDBSFBCPVUPOMZBCTUSBDUEJ⒎FSFOUJBM PQFSBUJPOTPOMZ w #BDLFOE 4PMWFS XSJUFSTDBOJNQMFNFOUUIFNDPODSFUFMZ MFBWJOHFRVBUJPOTUIFNTFMWFTVOUPVDIFE

Slide 45

Slide 45 text

5BHMFTT'JOBM4UZMF<> data family PhysQty m class Monad m  MonadDiff m where grad  PhysQty m  m (PhysQty m) div  PhysQty m  m (PhysQty m) w "CTUSBDUDPNNPOPQFSBUJPOBTBNPOBEJDGVODUJPO w "DUVBMMZ diffOFFETTPNFHFPNFUSJDJOGPBTBOFYUSBBSHVNFOU CVUJUJTIJEEFOJOMonadic value m w 5IJTIJEFTUIFJNQMEFUBJMPGEJ⒎PQTBOEFOBCMFTVTUPTFQBSBUFJNQM GSPNBCTUSBDUFRVBUJPOT5IJTFODPVSBHFTNPEVMBSJUZBOEHFOFSBMJUZ

Slide 46

Slide 46 text

0VUDPNFNVMUJQMF CBDLFOET

Slide 47

Slide 47 text

0VUDPNFNVMUJQMF CBDLFOET w 0OFDBOJNQMFNFOUBOETXJUDINVMUJQMFTPMWFSTFBTJMZ

Slide 48

Slide 48 text

0VUDPNFNVMUJQMF CBDLFOET w 0OFDBOJNQMFNFOUBOETXJUDINVMUJQMFTPMWFSTFBTJMZ w 8JUIPVUSFXSJUJOHUIFFYJTUJOHEJ⒎FSFOUJBMFRVBUJPOT

Slide 49

Slide 49 text

0VUDPNFNVMUJQMF CBDLFOET w 0OFDBOJNQMFNFOUBOETXJUDINVMUJQMFTPMWFSTFBTJMZ w 8JUIPVUSFXSJUJOHUIFFYJTUJOHEJ⒎FSFOUJBMFRVBUJPOT w $VSSFOUMZXFIBWF4PMWFSTJTPNPSQIJDUPQVSFReader envBOEReaderT env IO

Slide 50

Slide 50 text

0VUDPNFNVMUJQMF CBDLFOET w 0OFDBOJNQMFNFOUBOETXJUDINVMUJQMFTPMWFSTFBTJMZ w 8JUIPVUSFXSJUJOHUIFFYJTUJOHEJ⒎FSFOUJBMFRVBUJPOT w $VSSFOUMZXFIBWF4PMWFSTJTPNPSQIJDUPQVSFReader envBOEReaderT env IO w 5IFMBUUFSJTDBMMFE3*0QBUUFSOJO)BTLFMMDPNNVOJUZ

Slide 51

Slide 51 text

0VUDPNFNVMUJQMF CBDLFOET w 0OFDBOJNQMFNFOUBOETXJUDINVMUJQMFTPMWFSTFBTJMZ w 8JUIPVUSFXSJUJOHUIFFYJTUJOHEJ⒎FSFOUJBMFRVBUJPOT w $VSSFOUMZXFIBWF4PMWFSTJTPNPSQIJDUPQVSFReader envBOEReaderT env IO w 5IFMBUUFSJTDBMMFE3*0QBUUFSOJO)BTLFMMDPNNVOJUZ w (JWFTVTVOJGPSNUSFBUNFOUGPSCPUIJNNVUBCMF TUBUFTZFUSFUBJOJOHUISFBEBOEFYDFQUJPOTBGFUZ

Slide 52

Slide 52 text

0VUDPNFNVMUJQMF CBDLFOET w 0OFDBOJNQMFNFOUBOETXJUDINVMUJQMFTPMWFSTFBTJMZ w 8JUIPVUSFXSJUJOHUIFFYJTUJOHEJ⒎FSFOUJBMFRVBUJPOT w $VSSFOUMZXFIBWF4PMWFSTJTPNPSQIJDUPQVSFReader envBOEReaderT env IO w 5IFMBUUFSJTDBMMFE3*0QBUUFSOJO)BTLFMMDPNNVOJUZ w (JWFTVTVOJGPSNUSFBUNFOUGPSCPUIJNNVUBCMF TUBUFTZFUSFUBJOJOHUISFBEBOEFYDFQUJPOTBGFUZ w 8FVTFDerivingViaUPSFEVDFCPJMFSQMBUFDPEFTGPS TVDIJOTUBODFT

Slide 53

Slide 53 text

1SPCMFN5PP.VDI#JOET 1SPCMFN)BWFUPXSJUF( )UPDPNQPTFGVODUJPOT

Slide 54

Slide 54 text

1SPCMFN5PP.VDI#JOET ν △ u − 1 ρ grad P 1SPCMFN)BWFUPXSJUF( )UPDPNQPTFGVODUJPOT

Slide 55

Slide 55 text

1SPCMFN5PP.VDI#JOET ν △ u − 1 ρ grad P (-)  ((nu *)  laplacian u)  ((/rho)  grad u) 1SPCMFN)BWFUPXSJUF( )UPDPNQPTFGVODUJPOT

Slide 56

Slide 56 text

1SPCMFN5PP.VDI#JOET w 8FVTF("%5T JOJUJBMSFQS UPQSPWJEFTNBSU DPOTUSVDUPST ν △ u − 1 ρ grad P (-)  ((nu *)  laplacian u)  ((/rho)  grad u) 1SPCMFN)BWFUPXSJUF( )UPDPNQPTFGVODUJPOT

Slide 57

Slide 57 text

1SPCMFN5PP.VDI#JOET w 8FVTF("%5T JOJUJBMSFQS UPQSPWJEFTNBSU DPOTUSVDUPST w 5IFZBMTPUBLFTDBSFPGBEEJUJPOBMQSFQPTU QSPDFTTFTGPSFBDIEJ⒎FSFOUJBMPQFSBUPST ν △ u − 1 ρ grad P (-)  ((nu *)  laplacian u)  ((/rho)  grad u) 1SPCMFN)BWFUPXSJUF( )UPDPNQPTFGVODUJPOT

Slide 58

Slide 58 text

*OJUJBM3FQSFTFOUBUJPO w 'SFF 0QFSBUJPOBM .POBEBOETNBSUDPOT VTJOH("%5T w %J⒎FSFOUJBMPQFSBUPSTDBOBDDFQUBOZUFSNXIJDIDBOCF DBTUFEUPUIFJSJOUFOEFEBSHVNFOUT data Expr m a where Join  Expr m (Expr m a)  Expr m a Grad  (ToPhysQty m qty)  Expr m qty  Expr m (PhysQty m) grad'  (ToPhysQty m a)  a  Expr m (PhysQty m) grad' = Grad . toExpr -- pre-process for conversion

Slide 59

Slide 59 text

&YBNQMF stokesEqn u ρ p = eval $ (1 /: ρ) .*: (eta .*: laplace' u -: grad' p) ∂u ∂t = 1 ρ (η ▵ u − grad P) "MNPTU-JUFSBM5SBOTMBUJPOJOUPUIF$PEF 㾎0OFEPFTOUIBWFUPLOPXBCPVUBOZ JNQMFNFOUBUJPOEFUBJMUPXSJUFFRVBUJPOT

Slide 60

Slide 60 text

5BHMFTTpOBM4VNNBSZ

Slide 61

Slide 61 text

5BHMFTTpOBM4VNNBSZ w 4FQBSBUFTBSFBPGUBTLTCZNPOBEJDPQFSBUJPOT FOBCMJOHUPDPODFOUSBUFPOUIFJSPXOCVTJOFTT

Slide 62

Slide 62 text

5BHMFTTpOBM4VNNBSZ w 4FQBSBUFTBSFBPGUBTLTCZNPOBEJDPQFSBUJPOT FOBCMJOHUPDPODFOUSBUFPOUIFJSPXOCVTJOFTT w &RVBUJPOXSJUFSTEPOUIBWFUPDBSFBCPVUJNQM EFUBJM

Slide 63

Slide 63 text

5BHMFTTpOBM4VNNBSZ w 4FQBSBUFTBSFBPGUBTLTCZNPOBEJDPQFSBUJPOT FOBCMJOHUPDPODFOUSBUFPOUIFJSPXOCVTJOFTT w &RVBUJPOXSJUFSTEPOUIBWFUPDBSFBCPVUJNQM EFUBJM w 8FFYQMPJUTJNJMBSUFDITUPEFMJNJUNBOZPUIFS UBTLTFRVBUJPO PQFSBUJPOJNQM DBDIJOH JOUFS QSPDFTTDPNNVOJDBUJPO

Slide 64

Slide 64 text

5BHMFTTpOBM4VNNBSZ w 4FQBSBUFTBSFBPGUBTLTCZNPOBEJDPQFSBUJPOT FOBCMJOHUPDPODFOUSBUFPOUIFJSPXOCVTJOFTT w &RVBUJPOXSJUFSTEPOUIBWFUPDBSFBCPVUJNQM EFUBJM w 8FFYQMPJUTJNJMBSUFDITUPEFMJNJUNBOZPUIFS UBTLTFRVBUJPO PQFSBUJPOJNQM DBDIJOH JOUFS QSPDFTTDPNNVOJDBUJPO w 8FDBOVTFJOJUJBMSFQSFTFOUBUJPOUPFMJNJOBUF CJOEIFMMJOUBHMFTTpOBMTUZMF

Slide 65

Slide 65 text

0VS(PBMTBOE)BTLFMM w (FOFSBM1VSQPTF4PMWFS w %FQFOEFOU)BTLFMM w 5BHMFTT'JOBMBOE*OJUJBM3FQSFTFOUBUJPO w 4QFFEBOE4DBMF w 1SJNJUJWF.POBET 3FXSJUJOH3VMFT 4QFDJBMJTBUJPO *OUFSQSPDFTT DPNNVOJDBUJPO w .POBEJD4FRVFODF"CTUSBDUJPOUPNBLFVTFPGUIFTF w 1MVHJOTVTJOH&YUFOTJCMF3FDPSET w "OENBOZPUIFSUFDIOJRVFTOPUNFOUJPOFEUIJTUBML .PEVMBSJUZ

Slide 66

Slide 66 text

0VS(PBMTBOE)BTLFMM w (FOFSBM1VSQPTF4PMWFS w %FQFOEFOU)BTLFMM w 5BHMFTT'JOBMBOE*OJUJBM3FQSFTFOUBUJPO w 4QFFEBOE4DBMF w 1SJNJUJWF.POBET 3FXSJUJOH3VMFT 4QFDJBMJTBUJPO *OUFSQSPDFTT DPNNVOJDBUJPO w .POBEJD4FRVFODF"CTUSBDUJPOUPNBLFVTFPGUIFTF w 1MVHJOTVTJOH&YUFOTJCMF3FDPSET w "OENBOZPUIFSUFDIOJRVFTOPUNFOUJPOFEUIJTUBML

Slide 67

Slide 67 text

4QFFEBOE&YQSFTTJWJUZ 1SJNJUJWF.POBETBOE .POBEJD4FRVFODF

Slide 68

Slide 68 text

4FRVFOUJBMUZQFTJO)BTLFMM w 1IZTJDBMWBMVFTBSFFYQSFTTFEBTTFRVFODFTPGSFBMT w 8IJDI4FRVFODFUZQFNVTUXFVTF w -JTUTHJWFOJO1SFMVEF TJNQMFBOEEFDMBSBUJWF*'CVU4-08 JOEFYJOH BENJUT'VTJPO w 7FDUPST'BTU 0 JOEFYJOHXJUIEFDMBSBUJWF*' F⒏DJFOU TUPSBHFGPS6OCPYFEUZQFT BENJUT'VTJPO 5FNQFSBUVSFT Cell #0 #1 #2 #3 ʜʜ 273K 273K 300K 450K

Slide 69

Slide 69 text

4USFBN'VTJPO< > f z ∘ g ≡ (f ∘ g) z

Slide 70

Slide 70 text

4USFBN'VTJPO< > w 'VODUJPOTPOTFRVFODFTBUJTpFTTPNFBMHFCSBJDMBXT XIJDIGVTFT NVMUJQMFMPPQJOUPPOFQBTT f z ∘ g ≡ (f ∘ g) z

Slide 71

Slide 71 text

4USFBN'VTJPO< > w 'VODUJPOTPOTFRVFODFTBUJTpFTTPNFBMHFCSBJDMBXT XIJDIGVTFT NVMUJQMFMPPQJOUPPOFQBTT w VectorsFYQMPJUTVDISFMBUJPOTUPPQUJNJTFGVODUJPOT f z ∘ g ≡ (f ∘ g) z

Slide 72

Slide 72 text

4USFBN'VTJPO< > w 'VODUJPOTPOTFRVFODFTBUJTpFTTPNFBMHFCSBJDMBXT XIJDIGVTFT NVMUJQMFMPPQJOUPPOFQBTT w VectorsFYQMPJUTVDISFMBUJPOTUPPQUJNJTFGVODUJPOT w 5IFZPODFDPOWFSUWFDUPSTUPBCTUSBDUStreamTBOEBundleT f z ∘ g ≡ (f ∘ g) z

Slide 73

Slide 73 text

4USFBN'VTJPO< > w 'VODUJPOTPOTFRVFODFTBUJTpFTTPNFBMHFCSBJDMBXT XIJDIGVTFT NVMUJQMFMPPQJOUPPOFQBTT w VectorsFYQMPJUTVDISFMBUJPOTUPPQUJNJTFGVODUJPOT w 5IFZPODFDPOWFSUWFDUPSTUPBCTUSBDUStreamTBOEBundleT w 4USFBNBNPOBEJDHFOFSBUJOHGVODUJPO f z ∘ g ≡ (f ∘ g) z

Slide 74

Slide 74 text

4USFBN'VTJPO< > w 'VODUJPOTPOTFRVFODFTBUJTpFTTPNFBMHFCSBJDMBXT XIJDIGVTFT NVMUJQMFMPPQJOUPPOFQBTT w VectorsFYQMPJUTVDISFMBUJPOTUPPQUJNJTFGVODUJPOT w 5IFZPODFDPOWFSUWFDUPSTUPBCTUSBDUStreamTBOEBundleT w 4USFBNBNPOBEJDHFOFSBUJOHGVODUJPO w #VOEMF4USFBNPQUJPOBMDPODSFUFWFDUPSWBMVFBOEMFOHUI JOGPSNBUJPO f z ∘ g ≡ (f ∘ g) z

Slide 75

Slide 75 text

4USFBN'VTJPO< > w 'VODUJPOTPOTFRVFODFTBUJTpFTTPNFBMHFCSBJDMBXT XIJDIGVTFT NVMUJQMFMPPQJOUPPOFQBTT w VectorsFYQMPJUTVDISFMBUJPOTUPPQUJNJTFGVODUJPOT w 5IFZPODFDPOWFSUWFDUPSTUPBCTUSBDUStreamTBOEBundleT w 4USFBNBNPOBEJDHFOFSBUJOHGVODUJPO w #VOEMF4USFBNPQUJPOBMDPODSFUFWFDUPSWBMVFBOEMFOHUI JOGPSNBUJPO w TUSFBNVOTUSFBNGVODUJPOTDPOWFSUT7FDUPSTUPGSPN#VOEMFT f z ∘ g ≡ (f ∘ g) z

Slide 76

Slide 76 text

1SPCMFN.BOZLJOETPG WFDUPS w #PYFEDBOTUPSFBOZUZQFT w 6OCPYFEDBOTUPSF TVNPGQSPEVDUTPG VOCPYFE UZQFTFH*OU %PVCMF #PPM w 4UPSBCMFGPSDPNNVOJDBUJPOTXJUI$MJCSBSZ w BOENPOPNPSQIJDOFXUZQFXSBQQFSTBSPVOEUIFN w 1SPCMFN8FXBOUUPUSFBUUIFNVOJGPSNMZ w $BOXFEPUIJTSFUBJOJOHF⒏DJFODZPGWFDUPST

Slide 77

Slide 77 text

'JSTU"UUFNQU type family Elem seq type family Key seq class Monad m  MSeq m seq where imap  (Key seq  Elem seq  Elem seq)  seq m seq index  Index seq  seq  m (Elem seq) ifoldr  (Key seq  Elem seq  Elem seq)   accum   instance Monad m  MSeq m (Vector a) instance Monad m  MSeq m (VecMap k a) .POBEJDSFTVMU w 1SPCMFN.POBEJDSFTVMUNJHIUTBDSJpDFTUSFBNGVTJPO w 1SPCMFN)BWFUPJNQMFNFOUWFDUPSPQFSBUJPOTBMMCZIBOET .BOZPUIFSPQT

Slide 78

Slide 78 text

"OTXFSTUSFBNVOTUSFBN

Slide 79

Slide 79 text

"OTXFSTUSFBNVOTUSFBN w "MNPTUBMMWFDUPSPQFSBUJPOTBSFJOEFFEJNQMEBT DPNQPTJUJPOTPGTUSFBNVOTUSFBNXJUI4USFBN #VOEMFPQFSBUJPOT

Slide 80

Slide 80 text

"OTXFSTUSFBNVOTUSFBN w "MNPTUBMMWFDUPSPQFSBUJPOTBSFJOEFFEJNQMEBT DPNQPTJUJPOTPGTUSFBNVOTUSFBNXJUI4USFBN #VOEMFPQFSBUJPOT w 4JODF4USFBN#VOEMFTBSFNPOBEJDCZEFGBVMUBOE UIFZGVTFTXFMM XFDBOHFUF⒏DJFODZGPSGSFF

Slide 81

Slide 81 text

"OTXFSTUSFBNVOTUSFBN w "MNPTUBMMWFDUPSPQFSBUJPOTBSFJOEFFEJNQMEBT DPNQPTJUJPOTPGTUSFBNVOTUSFBNXJUI4USFBN #VOEMFPQFSBUJPOT w 4JODF4USFBN#VOEMFTBSFNPOBEJDCZEFGBVMUBOE UIFZGVTFTXFMM XFDBOHFUF⒏DJFODZGPSGSFF w 5IFSVMFstream ○ unstream ≡ returnSFEVDFT JOUFSOBMUFSNTFWFOJGUIFSFTVMUJTNPOBEJD

Slide 82

Slide 82 text

"OTXFSTUSFBNVOTUSFBN w "MNPTUBMMWFDUPSPQFSBUJPOTBSFJOEFFEJNQMEBT DPNQPTJUJPOTPGTUSFBNVOTUSFBNXJUI4USFBN #VOEMFPQFSBUJPOT w 4JODF4USFBN#VOEMFTBSFNPOBEJDCZEFGBVMUBOE UIFZGVTFTXFMM XFDBOHFUF⒏DJFODZGPSGSFF w 5IFSVMFstream ○ unstream ≡ returnSFEVDFT JOUFSOBMUFSNTFWFOJGUIFSFTVMUJTNPOBEJD w 0OFDBOBMTPQSPWJEFBO*'UPGVTFEJ⒎FSFOULJOEPG WFDUPSTJOUPPOF

Slide 83

Slide 83 text

3FTVMU type family VecRep seq  Type  Type class (Monad m)  MSequence m seq where unfoldrM  (s  m (Maybe (Elem seq, s)))  s  m seq indexM'  seq  Int  m (Elem seq) stream'  seq  B.Bundle m (VecRep seq) (Elem seq) unstream'  B.Bundle m (VecRep seq) (Elem seq)  m seq

Slide 84

Slide 84 text

3FTVMU type family VecRep seq  Type  Type class (Monad m)  MSequence m seq where unfoldrM  (s  m (Maybe (Elem seq, s)))  s  m seq indexM'  seq  Int  m (Elem seq) stream'  seq  B.Bundle m (VecRep seq) (Elem seq) unstream'  B.Bundle m (VecRep seq) (Elem seq)  m seq w "MMPUIFSPQFSBUJPOTBSFEFSJWFEGSPNUIFTFQSJNJUJWFTXJUI Data.Vector.Fusion.Bundle.MonadicNPEVMF

Slide 85

Slide 85 text

3FTVMU type family VecRep seq  Type  Type class (Monad m)  MSequence m seq where unfoldrM  (s  m (Maybe (Elem seq, s)))  s  m seq indexM'  seq  Int  m (Elem seq) stream'  seq  B.Bundle m (VecRep seq) (Elem seq) unstream'  B.Bundle m (VecRep seq) (Elem seq)  m seq w "MMPUIFSPQFSBUJPOTBSFEFSJWFEGSPNUIFTFQSJNJUJWFTXJUI Data.Vector.Fusion.Bundle.MonadicNPEVMF w 0OFDBOFYQMPJUGVTJPOSVMFTQSPWJEFECZWFDUPSQBDLBHFGPSGSFF

Slide 86

Slide 86 text

3FTVMU type family VecRep seq  Type  Type class (Monad m)  MSequence m seq where unfoldrM  (s  m (Maybe (Elem seq, s)))  s  m seq indexM'  seq  Int  m (Elem seq) stream'  seq  B.Bundle m (VecRep seq) (Elem seq) unstream'  B.Bundle m (VecRep seq) (Elem seq)  m seq w "MMPUIFSPQFSBUJPOTBSFEFSJWFEGSPNUIFTFQSJNJUJWFTXJUI Data.Vector.Fusion.Bundle.MonadicNPEVMF w 0OFDBOFYQMPJUGVTJPOSVMFTQSPWJEFECZWFDUPSQBDLBHFGPSGSFF w #POVT)FUFSPHFOFPVT$PNCJOBUPSTBOE1SJN.POBEPQUJNJTBUJPO

Slide 87

Slide 87 text

#POVT)FUFSPHFOFPVT $PNCJOBUPST w 0OFDBONBQ[JQEJ⒎FSFOULJOEPGTUSFBNTJOPOFQBTT w 8FQSPWJEF3FXSJUF3VMFTUPFMJNJOBUFDPOWFSTJPOPWFSIFBET XIFOTPNFPGBSHVNFOUTIBWFUIFTBNFWFDUPSSFQSFTFOUBUJPO hzipWith  (MSeq m s, MSeq m t, MSeq m u, Key s ~ Key t, Key s ~ Key u)  (Elem s  Elem t  Elem u)  s  t  m u hzipWithM f = \as bs  unstream $ B.zipWithM f (B.reVector $ stream as) (B.reVector $ stream bs)

Slide 88

Slide 88 text

#POVT%FTUSVDUJWF "TTJHONFOUTBSF:PVS'SJFOET

Slide 89

Slide 89 text

#POVT%FTUSVDUJWF "TTJHONFOUTBSF:PVS'SJFOET w MSeqBTTVNFTUIFJSSFUVSOUZQFUPCFNPOBEJD

Slide 90

Slide 90 text

#POVT%FTUSVDUJWF "TTJHONFOUTBSF:PVS'SJFOET w MSeqBTTVNFTUIFJSSFUVSOUZQFUPCFNPOBEJD w 5IFSFJTBDMBTTPG.POBETBENJUUJOHEFTUSVDUJWF BTTJHONFOUT PrimMonad GSPNprimitiveQBDLBHF

Slide 91

Slide 91 text

#POVT%FTUSVDUJWF "TTJHONFOUTBSF:PVS'SJFOET w MSeqBTTVNFTUIFJSSFUVSOUZQFUPCFNPOBEJD w 5IFSFJTBDMBTTPG.POBETBENJUUJOHEFTUSVDUJWF BTTJHONFOUT PrimMonad GSPNprimitiveQBDLBHF w 1SPWJEFTBDPNNPO*'GPSSTBOEIONPOBETBOE NPOBEUSBOTGPSNFSTBSPVOEUIFN

Slide 92

Slide 92 text

#POVT%FTUSVDUJWF "TTJHONFOUTBSF:PVS'SJFOET w MSeqBTTVNFTUIFJSSFUVSOUZQFUPCFNPOBEJD w 5IFSFJTBDMBTTPG.POBETBENJUUJOHEFTUSVDUJWF BTTJHONFOUT PrimMonad GSPNprimitiveQBDLBHF w 1SPWJEFTBDPNNPO*'GPSSTBOEIONPOBETBOE NPOBEUSBOTGPSNFSTBSPVOEUIFN w *GVOEFSMZJOHNPOBEmJTPrimMonad POFDBOVTFUIFJS BCJMJUZGPSNVUBCMFSFGFSFODFTUPHBJOQFSGPSNBODF

Slide 93

Slide 93 text

VOTUSFBNXJUI1SJN.POBE w *GNJTPrimMonad JOQBSUJDVMBSJGIOXJUIFYUSBUSBOTGPSNFS MBZFSTPOUPQ XFDBOVTFNVUBCMFPQFSBUJPOTPOUIFNUPHFU WFDUPSTJOTUBOUMZ w 5IJTHBWFVTYTQFFEVQTJOQSBDUJDF &YBDUSFDPSETBSF MPTUTPSSZ ‎ $PNQPTFTXFMMXJUIUBHMFTTpOBMBQQSPBDI unstreamPrimM  (PrimMonad m, Vector (VRep s) (Elem s), VRep s (Elem seq) ~R# seq)  B.Bundle m u (Element s)  m s unstreamPrimM s = coerce  (G.unsafeFreeze  MG.munstream s) {-# RULES "unstreamM[IO]" unstreamM = unstreamPrimM #-}

Slide 94

Slide 94 text

.POBEJD4FRVFODFBOE 1SJN.POBE4VNNBSZ

Slide 95

Slide 95 text

.POBEJD4FRVFODFBOE 1SJN.POBE4VNNBSZ w 4USFBN'VTJPOSFEVDFTDPOTUBOUPWFSIFBETJHOJpDBOUMZ w &YQMPJUJOHvectorT4USFBN#VOEMF'VTJPONFDIBOJTN XPSLTMJLFBDIBSN w "MTPFOBCMFTUPGVTFEJ⒎FSFOULJOEPGWFDUPST w 3FXSJUJOH3VMFTDBOIFMQSFEVDFPWFSIFBEIFSF

Slide 96

Slide 96 text

.POBEJD4FRVFODFBOE 1SJN.POBE4VNNBSZ w 4USFBN'VTJPOSFEVDFTDPOTUBOUPWFSIFBETJHOJpDBOUMZ w &YQMPJUJOHvectorT4USFBN#VOEMF'VTJPONFDIBOJTN XPSLTMJLFBDIBSN w "MTPFOBCMFTUPGVTFEJ⒎FSFOULJOEPGWFDUPST w 3FXSJUJOH3VMFTDBOIFMQSFEVDFPWFSIFBEIFSF w *GUIFSFTVMUUZQFJTNPOBEJD UIFOPOFDBOFYQMPJU1SJN.POBE JOTUBODFUPHBJONPSFTQFFE SFUBJOJOHEFDMBSBUJWFNBOOFS w 5IJTDPNQPTFTXFMMXJUIUBHMFTTpOBMTUZMFBQQSPBDI JNQMFNFOUFEXJUI3*0QBUUFSO w %FTUSVDUJWFBTTJHONFOUT EJTHVJTFEBTEFDMBSBUJWF DPNCJOBUPST BSFJOEFFEZPVSGSJFOET

Slide 97

Slide 97 text

0VS(PBMTBOE)BTLFMM w (FOFSBM1VSQPTF4PMWFS w %FQFOEFOU)BTLFMM w 5BHMFTT'JOBMBOE*OJUJBM3FQSFTFOUBUJPO w 4QFFEBOE4DBMF w 1SJNJUJWF.POBET 3FXSJUJOH3VMFT 4QFDJBMJTBUJPO *OUFSQSPDFTT DPNNVOJDBUJPO w .POBEJD4FRVFODF"CTUSBDUJPOUPNBLFVTFPGUIFTF w 1MVHJOTVTJOH&YUFOTJCMF3FDPSET w "OENBOZPUIFSUFDIOJRVFTOPUNFOUJPOFEUIJTUBML

Slide 98

Slide 98 text

0VS(PBMTBOE)BTLFMM w (FOFSBM1VSQPTF4PMWFS w %FQFOEFOU)BTLFMM w 5BHMFTT'JOBMBOE*OJUJBM3FQSFTFOUBUJPO w 4QFFEBOE4DBMF w 1SJNJUJWF.POBET 3FXSJUJOH3VMFT 4QFDJBMJTBUJPO *OUFSQSPDFTT DPNNVOJDBUJPO w .POBEJD4FRVFODF"CTUSBDUJPOUPNBLFVTFPGUIFTF w 1MVHJOTVTJOH&YUFOTJCMF3FDPSET w "OENBOZPUIFSUFDIOJRVFTOPUNFOUJPOFEUIJTUBML &YUFOTJCJMJUZ

Slide 99

Slide 99 text

&YUFOTJCJMJUZ &YUFOTJCMF3FDPSET

Slide 100

Slide 100 text

.PUJWBUJPO1MVHJO .FDIBOJTN

Slide 101

Slide 101 text

.PUJWBUJPO1MVHJO .FDIBOJTN w 5BHMFTTpOBMTUZMFBMMPXFEVTUPXSJUFNVMUJQMF 4PMWFSTOJDFMZ

Slide 102

Slide 102 text

.PUJWBUJPO1MVHJO .FDIBOJTN w 5BHMFTTpOBMTUZMFBMMPXFEVTUPXSJUFNVMUJQMF 4PMWFSTOJDFMZ w CVUUIFPGTPMWFSTFWFOUVBMMZJODSFBTFE BOE JUIBECFDPNFIBSEUPNBJOUBJOBMMPGUIFN

Slide 103

Slide 103 text

.PUJWBUJPO1MVHJO .FDIBOJTN w 5BHMFTTpOBMTUZMFBMMPXFEVTUPXSJUFNVMUJQMF 4PMWFSTOJDFMZ w CVUUIFPGTPMWFSTFWFOUVBMMZJODSFBTFE BOE JUIBECFDPNFIBSEUPNBJOUBJOBMMPGUIFN w *UJTEFTJSBCMFGPSVTUPIBWFPOMZBMJNJUFEOVNCFS PG4PMWFSTBOEFYUFOEUIFNCZ1MVHJOTGPS NPEVMBSJUZBOENBJOUBJOBCJMJUZ

Slide 104

Slide 104 text

.PUJWBUJPO1MVHJO .FDIBOJTN w 5BHMFTTpOBMTUZMFBMMPXFEVTUPXSJUFNVMUJQMF 4PMWFSTOJDFMZ w CVUUIFPGTPMWFSTFWFOUVBMMZJODSFBTFE BOE JUIBECFDPNFIBSEUPNBJOUBJOBMMPGUIFN w *UJTEFTJSBCMFGPSVTUPIBWFPOMZBMJNJUFEOVNCFS PG4PMWFSTBOEFYUFOEUIFNCZ1MVHJOTGPS NPEVMBSJUZBOENBJOUBJOBCJMJUZ w 8IBUTOFFEFEGPSUIFN

Slide 105

Slide 105 text

1MVHJO4QFD class Plugin p where data PState p  Type data PConfig p  Type type POutput p  Type type PlugM p (m  *  *)  Constraint pluginOptionP  OptParser (PConfig p) setupState  MonadIO m  PConfig p  m (PState p) initialise  (p ∈ ps, MonadPlugins ps m, PlugM p m)  proxy p  Info  m Info finalise  (p ∈ ps, MonadPlugins ps m, PlugM p m)  proxy p  Info  m Info genOutput  (p ∈ ps, MonadPlugins ps m, PlugM p m)  PConfig p  m (POutput p)

Slide 106

Slide 106 text

#VOEMJOHNVMUJQMFQMVHJO EBUBUPPOF w 8FSFQSFTFOUUIF4PMWFSNPOBETXJUIQMVHJOTQTBTB4PMWFS QT XIFSFQTJTBUZQFMFWFMMJTUPGQMVHJOT data PStateBundle ps = PSB { p  PState p | p ∈ ps } w 0OFDBOTJNVMBUFTVDIEBUBUZQFTXJUI )JHIFS,JOEFE &YUFOTJCMF3FDPSET JOUIJTDBTF ),)-JTUTV⒏DFT UIPVHI w "OFOUJSF4PMWFSXJUIQMVHJOTpsNVTULFFQJOGP BTTPDJBUFEUPFBDIQMVHJOBTBCVOEMF TPNFUIJOHMJLF Solver '[] -- Solver without any Plugin 
 Solver '[A, B, C] -- Solver with Plugins A, B and C

Slide 107

Slide 107 text

&YUFOTJCMF3FDPSET w )BTLFMMT3FDPSE-BCFMTBOE7BMVFTBSFpYFE w &YUFOTJCMF3FDPSETPOFDBOEZOBNJDBMMZBEEEFMFUF DPOTUSBJOpFMETBOEUSFBUQPMZNPSQIJDBMMZ SFUBJOJOHUZQFTBGFUZ w 'PSFBDIp ∈ ps PState p WBMVFJOstates  PStateB psDBOCF SFUSJFWFECZstates ^. hfieldL @p w 5IFSFBSFQMFOUZPGFYJTUJOHMJCT extensible, vinyl, superrecords,FUD GPSFYUSFDTCVUXFJNQMECZPVSTFMWFTGPSTPNFSFBTPOT w ),%PQT TVDIBTCGPMES.CGPMEM. .FNCFSDPOTUS DBOCFVTFEUP QSPDFTTCVOEMFTCBDLXBSEGPSXBSE type PBundle h ps = Record h (IdentFields ps) type PStateB ps = PBundle PState ps

Slide 108

Slide 108 text

8IZDVTUPNMJCSBSZ

Slide 109

Slide 109 text

8IZDVTUPNMJCSBSZ w *UNVTUTBUJTGZUIFGPMMPXJOHTBUUIFTBNFUJNF

Slide 110

Slide 110 text

8IZDVTUPNMJCSBSZ w *UNVTUTBUJTGZUIFGPMMPXJOHTBUUIFTBNFUJNF w 'BTU"DDFTT*OUFSOBMSFQSNVTUCFBSSBZWFDUPS OPUMJOLFE MJTU

Slide 111

Slide 111 text

8IZDVTUPNMJCSBSZ w *UNVTUTBUJTGZUIFGPMMPXJOHTBUUIFTBNFUJNF w 'BTU"DDFTT*OUFSOBMSFQSNVTUCFBSSBZWFDUPS OPUMJOLFE MJTU w -JHIU1BDLBHF%FQFOEFODZXFOFFEPOMZXIBUXFOFFE

Slide 112

Slide 112 text

8IZDVTUPNMJCSBSZ w *UNVTUTBUJTGZUIFGPMMPXJOHTBUUIFTBNFUJNF w 'BTU"DDFTT*OUFSOBMSFQSNVTUCFBSSBZWFDUPS OPUMJOLFE MJTU w -JHIU1BDLBHF%FQFOEFODZXFOFFEPOMZXIBUXFOFFE w 1PMZNPSQIJD-BCFMXFXBOUUPMBCFMpFMETXJUIBSCJUSBSZ UZQFT OPUOFDFTTBSJMZDPOWFSUJCMFUP4ZNCPMTPS/BUT

Slide 113

Slide 113 text

8IZDVTUPNMJCSBSZ w *UNVTUTBUJTGZUIFGPMMPXJOHTBUUIFTBNFUJNF w 'BTU"DDFTT*OUFSOBMSFQSNVTUCFBSSBZWFDUPS OPUMJOLFE MJTU w -JHIU1BDLBHF%FQFOEFODZXFOFFEPOMZXIBUXFOFFE w 1PMZNPSQIJD-BCFMXFXBOUUPMBCFMpFMETXJUIBSCJUSBSZ UZQFT OPUOFDFTTBSJMZDPOWFSUJCMFUP4ZNCPMTPS/BUT w ),%MJLFPQFSBUJPOTOFFEFEGPSWBSJPVTGPMEJOHNBQQJOH PQFSBUJPOTFHTFSJBMJTBUJPO JOJUJBMJTBUJPO

Slide 114

Slide 114 text

8IZDVTUPNMJCSBSZ w *UNVTUTBUJTGZUIFGPMMPXJOHTBUUIFTBNFUJNF w 'BTU"DDFTT*OUFSOBMSFQSNVTUCFBSSBZWFDUPS OPUMJOLFE MJTU w -JHIU1BDLBHF%FQFOEFODZXFOFFEPOMZXIBUXFOFFE w 1PMZNPSQIJD-BCFMXFXBOUUPMBCFMpFMETXJUIBSCJUSBSZ UZQFT OPUOFDFTTBSJMZDPOWFSUJCMFUP4ZNCPMTPS/BUT w ),%MJLFPQFSBUJPOTOFFEFEGPSWBSJPVTGPMEJOHNBQQJOH PQFSBUJPOTFHTFSJBMJTBUJPO JOJUJBMJTBUJPO w 0VSMJCBMTPQSPWJEFT()$1MVHJOT BMMPXJOHUPXSJUF3FDPSE DPOTUSVDUJPOOBUVSBMMZBOESFEVDFTUIFBNPVOUPGIBOE XSJUUFOQSPPGT

Slide 115

Slide 115 text

#FGPSF5D1MVHJO (&%~)  forall l xs h a. Member l (Labels xs)  Record h xs  l := (h (ElemAt (Idx l (Labels xs)) (Vals xs))  h a)  Record h ((l  a) |< xs) Record hl &%~ (_ := f) = Record $ gcastWith (takeMapApply @Entry' @(Index l (Labels xs)) @xs) $ gcastWith (dropMapApply @Entry' @(Index l (Labels xs) + 1) @xs) $ gcastWith (mapApplyAppend @Entry' @(Take (Index l (Labels xs)) xs) @((l  a) ': Drop (Index l (Labels xs) + 1) xs) ) $ hmodify' (Proxy @(Index l (Labels xs))) f hl 5SJWJBMIBOEXSJUUFOQSPPGT .BQI YTZT .BQIYT.BQIZT

Slide 116

Slide 116 text

#FGPSF5D1MVHJO (&%~)  forall l xs h a. Member l (Labels xs)  Record h xs  l := (h (ElemAt (Idx l (Labels xs)) (Vals xs))  h a)  Record h ((l  a) |< xs) Record hl &%~ (_ := f) = Record $ gcastWith (takeMapApply @Entry' @(Index l (Labels xs)) @xs) $ gcastWith (dropMapApply @Entry' @(Index l (Labels xs) + 1) @xs) $ gcastWith (mapApplyAppend @Entry' @(Take (Index l (Labels xs)) xs) @((l  a) ': Drop (Index l (Labels xs) + 1) xs) ) $ hmodify' (Proxy @(Index l (Labels xs))) f hl 5SJWJBMIBOEXSJUUFOQSPPGT .BQI YTZT .BQIYT.BQIZT

Slide 117

Slide 117 text

"GUFS5D1MVHJO {-# OPTIONS_GHC -fplugin Data.TypeLevel.List.Solver #-} (&%~)  forall l xs h a. Member l (Labels xs)  Record h xs  l := (h (ElemAt (Idx l (Labels xs)) (Vals xs))  h a)  Record h ((l  a) |< xs) Record hl &%~ (_ := f) = Record $ hmodify' (Proxy @(Index l (Labels xs))) f hl

Slide 118

Slide 118 text

4PVSDF1MVHJO {-# LANGUAGE OverloadedLabels #-} record = emptyRec &+ #a := 42 &+ #b := False &+ #c := () {-# OPTIONS_GHC -fplugin Data.Record.Plugin #-} {-# LANGUAGE OverloadedLabels #-} record = MkRecord { a = 42  Int, b = False, c = () } 8JUIPVU4PVSDF1MVHJO 8JUI4PVSDF1MVHJO w 0WFSMPBEJOHGPS3FDPSEVQEBUFBOEBDDFTTPSTZOUBYDBOOPUCF JNQMFNFOUFEXJUIUIFDVSSFOU()$4PVSDF1MVHJO.FDIBOJTN

Slide 119

Slide 119 text

1MVHJOT4VNNBSZ

Slide 120

Slide 120 text

1MVHJOT4VNNBSZ w &YUFOTJCMF3FDPSETBSFQBSUJDVMBSMZVTFGVMGPS1MVHJOT

Slide 121

Slide 121 text

1MVHJOT4VNNBSZ w &YUFOTJCMF3FDPSETBSFQBSUJDVMBSMZVTFGVMGPS1MVHJOT w ),%PQFSBUJPOT TVDIBTIFUFSPGPMETBOENBQT DBOCFVTFEUP JNQMJOJUJBMJTBUJPOTFSJBMJTBUJPO

Slide 122

Slide 122 text

1MVHJOT4VNNBSZ w &YUFOTJCMF3FDPSETBSFQBSUJDVMBSMZVTFGVMGPS1MVHJOT w ),%PQFSBUJPOT TVDIBTIFUFSPGPMETBOENBQT DBOCFVTFEUP JNQMJOJUJBMJTBUJPOTFSJBMJTBUJPO w /PUPOMZ),%T CVUTJNQMFWBMVFMFWFMGPMEJOHPGUZQFMFWFMMJTUT JTBMTPVTFGVM

Slide 123

Slide 123 text

1MVHJOT4VNNBSZ w &YUFOTJCMF3FDPSETBSFQBSUJDVMBSMZVTFGVMGPS1MVHJOT w ),%PQFSBUJPOT TVDIBTIFUFSPGPMETBOENBQT DBOCFVTFEUP JNQMJOJUJBMJTBUJPOTFSJBMJTBUJPO w /PUPOMZ),%T CVUTJNQMFWBMVFMFWFMGPMEJOHPGUZQFMFWFMMJTUT JTBMTPVTFGVM w "LJOEPGSPXQPMZNPSQIJTNDBOBMTPCFVTFEUPUSFBUBCVOEMFPG QIZTJDBMRVBOUJUJFTQPMZNPSQIJDBMMZ

Slide 124

Slide 124 text

1MVHJOT4VNNBSZ w &YUFOTJCMF3FDPSETBSFQBSUJDVMBSMZVTFGVMGPS1MVHJOT w ),%PQFSBUJPOT TVDIBTIFUFSPGPMETBOENBQT DBOCFVTFEUP JNQMJOJUJBMJTBUJPOTFSJBMJTBUJPO w /PUPOMZ),%T CVUTJNQMFWBMVFMFWFMGPMEJOHPGUZQFMFWFMMJTUT JTBMTPVTFGVM w "LJOEPGSPXQPMZNPSQIJTNDBOBMTPCFVTFEUPUSFBUBCVOEMFPG QIZTJDBMRVBOUJUJFTQPMZNPSQIJDBMMZ w 8FEFWJTFEDVTUPN&YU3FDMJCSBSZXJUI

Slide 125

Slide 125 text

1MVHJOT4VNNBSZ w &YUFOTJCMF3FDPSETBSFQBSUJDVMBSMZVTFGVMGPS1MVHJOT w ),%PQFSBUJPOT TVDIBTIFUFSPGPMETBOENBQT DBOCFVTFEUP JNQMJOJUJBMJTBUJPOTFSJBMJTBUJPO w /PUPOMZ),%T CVUTJNQMFWBMVFMFWFMGPMEJOHPGUZQFMFWFMMJTUT JTBMTPVTFGVM w "LJOEPGSPXQPMZNPSQIJTNDBOBMTPCFVTFEUPUSFBUBCVOEMFPG QIZTJDBMRVBOUJUJFTQPMZNPSQIJDBMMZ w 8FEFWJTFEDVTUPN&YU3FDMJCSBSZXJUI w 1PMZNPSQIJDMBCFMT GBTUJOEFYJOH BVUPNBUJDDPOTUSBJOUTPMWJOH BTTJTUFECZ5ZQFDIFDLFSQMVHJOT

Slide 126

Slide 126 text

$PODMVTJPOT

Slide 127

Slide 127 text

$PODMVTJPOT w )BTLFMMDBOCFVTFEBDIJFWFTJNVMUBOFPVTMZ w )JHIQFSGPNBODFBOE w "CTUSBDU IJHIMZFYUFOTJCMF HFOFSBMQVSQPTFTPGUXBSF w ()$T%FQFOEFOU5ZQFTIFMQTFYUFOTJCJMJUZBOELFFQJOHJOWBSJBOUT w )VNBOT'PSHFU-FU5ZQFT3FNFNCFS w %FQFOEFOU5ZQFTBOE%FTUSVDUJWF"TTJHONFOUTBSFZPVSGSJFET w 8FBSFQMBOOJOHUPQVCMJTIJOUFSOBMMJCSBSJFT JOOPUTPGBSGVUVSF IPQFGVMMZ w 4UJMM UIFSFBSFNBOZUIJOHTUPCFJNQSPWFE

Slide 128

Slide 128 text

#JCMJPHSBQIZ Oleg Kiselyov, Tagless-final style. http:// okmij.org/ftp/tagless-final/index.html 2. D. Coutts, R. Leshchinskiy and D. Stewart, Stream Fusion: From Lists to Streams to Nothing at All. 3. G. Mainland, R. Leshchinskiy and SPJ, Exploiting Vector Instructions with Generalized Stream Fusion. 4. ghc-typelits-natnormalise package

Slide 129

Slide 129 text

5IBOLZPV

Slide 130

Slide 130 text

"OZ2VFTUJPOT w )BTLFMMDBOCFVTFEBDIJFWFTJNVMUBOFPVTMZ w )JHIQFSGPNBODFBOE w "CTUSBDU IJHIMZFYUFOTJCMF HFOFSBMQVSQPTFTPGUXBSF w ()$T%FQFOEFOU5ZQFTIFMQTFYUFOTJCJMJUZBOELFFQJOHJOWBSJBOUT w )VNBOT'PSHFU-FU5ZQFT3FNFNCFS w %FQFOEFOU5ZQFTBOE%FTUSVDUJWF"TTJHONFOUTBSFZPVSGSJFET w 8FBSFQMBOOJOHUPQVCMJTIJOUFSOBMMJCSBSJFT JOOPUTPGBSGVUVSF IPQFGVMMZ w 4UJMM UIFSFBSFNBOZUIJOHTUPCFJNQSPWFE